llviewermedia.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606
  1. /**
  2. * @file llviewermedia.h
  3. * @brief Client interface to the media engine
  4. *
  5. * $LicenseInfo:firstyear=2007&license=viewergpl$
  6. *
  7. * Copyright (c) 2007-2009, Linden Research, Inc.
  8. *
  9. * Second Life Viewer Source Code
  10. * The source code in this file ("Source Code") is provided by Linden Lab
  11. * to you under the terms of the GNU General Public License, version 2.0
  12. * ("GPL"), unless you have obtained a separate licensing agreement
  13. * ("Other License"), formally executed by you and Linden Lab. Terms of
  14. * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15. * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16. *
  17. * There are special exceptions to the terms and conditions of the GPL as
  18. * it is applied to this Source Code. View the full text of the exception
  19. * in the file doc/FLOSS-exception.txt in this software distribution, or
  20. * online at
  21. * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22. *
  23. * By copying, modifying or distributing this software, you acknowledge
  24. * that you have read and understood your obligations described above,
  25. * and agree to abide by those obligations.
  26. *
  27. * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28. * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29. * COMPLETENESS OR PERFORMANCE.
  30. * $/LicenseInfo$
  31. */
  32. #ifndef LLVIEWERMEDIA_H
  33. #define LLVIEWERMEDIA_H
  34. #include <list>
  35. #include "llcolor4.h"
  36. #include "llcorehttputil.h"
  37. #include "llnotifications.h"
  38. #include "llmutex.h"
  39. #include "llpanel.h"
  40. #include "llpluginclassmedia.h"
  41. #include "llpluginclassmediaowner.h"
  42. class LLUUID;
  43. class LLMediaEntry;
  44. class LLMimeDiscoveryResponder;
  45. class LLParcel;
  46. class LLTextureEntry;
  47. class LLViewerMediaEventEmitter;
  48. class LLViewerMediaImpl;
  49. class LLViewerMediaTexture;
  50. class LLViewerTexture;
  51. class LLVOVolume;
  52. typedef LLPointer<LLViewerMediaImpl> viewer_media_t;
  53. ///////////////////////////////////////////////////////////////////////////////
  54. // Classes that inherit from LLViewerMediaObserver should add this to their
  55. // class declaration:
  56. //
  57. // // inherited from LLViewerMediaObserver
  58. // void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent evt) override;
  59. //
  60. // and will probably need to add this to their cpp file:
  61. // #include "llpluginclassmedia.h"
  62. class LLViewerMediaObserver : public LLPluginClassMediaOwner
  63. {
  64. friend class LLViewerMediaEventEmitter;
  65. public:
  66. ~LLViewerMediaObserver() override;
  67. private:
  68. // Emitters will manage this list in addObserver/remObserver.
  69. std::list<LLViewerMediaEventEmitter*> mEmitters;
  70. };
  71. ///////////////////////////////////////////////////////////////////////////////
  72. class LLViewerMediaEventEmitter
  73. {
  74. public:
  75. virtual ~LLViewerMediaEventEmitter();
  76. bool addObserver(LLViewerMediaObserver* subject);
  77. bool remObserver(LLViewerMediaObserver* subject);
  78. void emitEvent(LLPluginClassMedia* self,
  79. LLPluginClassMediaOwner::EMediaEvent event);
  80. private:
  81. typedef std::list<LLViewerMediaObserver*> observerListType;
  82. observerListType mObservers;
  83. };
  84. class LLViewerMedia
  85. {
  86. protected:
  87. LOG_CLASS(LLViewerMedia);
  88. public:
  89. typedef std::list<LLViewerMediaImpl*> impl_list;
  90. // Special case early init for just web browser component so we can show
  91. // login screen. See .cpp file for details. JC
  92. static viewer_media_t newMediaImpl(const LLUUID& texture_id,
  93. S32 media_width = 0,
  94. S32 media_height = 0,
  95. bool media_auto_scale = false,
  96. bool media_loop = false);
  97. static viewer_media_t updateMediaImpl(LLMediaEntry* media_entry,
  98. const std::string& previous_url,
  99. bool update_from_self);
  100. static LLViewerMediaImpl* getMediaImplFromTextureID(const LLUUID& texture_id);
  101. static LLViewerMediaImpl* getMediaImplFromTextureEntry(const LLTextureEntry* tep);
  102. static std::string getCurrentUserAgent();
  103. static bool textureHasMedia(const LLUUID& texture_id);
  104. static void setVolume(F32 volume);
  105. // Is any media currently "showing" ? Includes parcel media. Does not
  106. // include media in the UI.
  107. static LL_INLINE bool isAnyMediaShowing() { return sAnyMediaShowing; }
  108. static LL_INLINE bool isAnyMediaEnabled() { return sAnyMediaEnabled; }
  109. static LL_INLINE bool isAnyMediaDisabled() { return sAnyMediaDisabled; }
  110. // Set all media enabled or disabled, depending on val. Does not include
  111. // media in the UI.
  112. static void setAllMediaEnabled(bool enable, bool parcel_media = true);
  113. // For use in menu callbacks (like setAllMediaEnabled(true/false) but with
  114. // parcel_media = false):
  115. static void sharedMediaEnable(void* data = NULL);
  116. static void sharedMediaDisable(void* data = NULL);
  117. static void updateMedia(void* dummy_arg = NULL);
  118. static void initClass();
  119. static void cleanupClass();
  120. static F32 getVolume();
  121. static void muteListChanged();
  122. static bool isInterestingEnough(const LLVOVolume* object, F64 interest);
  123. // Returns the priority-sorted list of all media impls.
  124. static impl_list& getPriorityList();
  125. // This is the comparator used to sort the list.
  126. static bool priorityComparator(const LLViewerMediaImpl* i1,
  127. const LLViewerMediaImpl* i2);
  128. // This is just a helper function for the convenience of others working
  129. // with media:
  130. static bool hasInWorldMedia();
  131. static void onAuthSubmit(const LLUUID media_id, const std::string username,
  132. const std::string password, bool validated);
  133. // Clear all cookies for all plugins
  134. static void clearAllCookies();
  135. // Clear all plugins' caches
  136. static void clearAllCaches();
  137. // Set the "cookies enabled" flag for all loaded plugins
  138. static void setCookiesEnabled(bool enabled);
  139. // Set the proxy config for all loaded plugins
  140. static void setProxyConfig(bool enable, const std::string& host, S32 port);
  141. static void openIDSetup(const std::string& url, const std::string& token);
  142. static void openIDCookieResponse(const std::string& url,
  143. const std::string& cookie);
  144. static void setOnlyAudibleMediaTextureID(const LLUUID& texture_id);
  145. // For the media filter implementation:
  146. // type: 0 = media, 1 = streaming music
  147. static void filterParcelMedia(LLParcel* parcel, U32 type);
  148. // Returns true if filtering is needed (permission dialog shown to user, or
  149. // media rejected).
  150. static bool filterMedia(LLViewerMediaImpl* impl);
  151. static bool allowedMedia(std::string media_url);
  152. static bool loadDomainFilterList();
  153. static void saveDomainFilterList();
  154. static void clearDomainFilterList();
  155. static std::string extractDomain(std::string url);
  156. static std::string getDomainIP(const std::string& domain,
  157. bool force = false);
  158. private:
  159. static void setOpenIDCookie(const std::string& url = LLStringUtil::null);
  160. static void openIDSetupCoro(std::string url, const std::string& token);
  161. static void onTeleportFinished();
  162. public:
  163. // For the media filter implementation:
  164. static bool sIsUserAction;
  165. static bool sMediaFilterListLoaded;
  166. static LLSD sMediaFilterList;
  167. static std::set<std::string> sMediaQueries;
  168. static std::set<std::string> sAllowedMedia;
  169. static std::set<std::string> sDeniedMedia;
  170. private:
  171. // For the media filter implementation:
  172. static std::map<std::string, std::string> sDNSlookups;
  173. static std::string sOpenIDCookie;
  174. static bool sAnyMediaShowing;
  175. static bool sAnyMediaEnabled;
  176. static bool sAnyMediaDisabled;
  177. };
  178. // Implementation functions not exported into header file
  179. class LLViewerMediaImpl : public LLMouseHandler,
  180. public LLRefCount,
  181. public LLPluginClassMediaOwner,
  182. public LLViewerMediaEventEmitter,
  183. public LLEditMenuHandler
  184. {
  185. protected:
  186. LOG_CLASS(LLViewerMediaImpl);
  187. public:
  188. friend class LLViewerMedia;
  189. LLViewerMediaImpl(const LLUUID& texture_id,
  190. S32 media_width, S32 media_height,
  191. bool media_auto_scale, bool media_loop);
  192. ~LLViewerMediaImpl() override;
  193. // Override inherited version from LLViewerMediaEventEmitter
  194. virtual void emitEvent(LLPluginClassMedia* self,
  195. LLViewerMediaObserver::EMediaEvent event);
  196. void createMediaSource();
  197. void destroyMediaSource();
  198. void setMediaType(const std::string& media_type);
  199. bool initializeMedia(const std::string& mime_type);
  200. bool initializePlugin(const std::string& media_type);
  201. void loadURI();
  202. LL_INLINE LLPluginClassMedia* getMediaPlugin() { return mMediaSource; }
  203. void setSize(int width, int height);
  204. void showNotification(LLNotificationPtr notify);
  205. void hideNotification();
  206. void play();
  207. void stop();
  208. void pause();
  209. void start();
  210. void seek(F32 time);
  211. void skipBack(F32 step_scale);
  212. void skipForward(F32 step_scale);
  213. void updateVolume();
  214. F32 getVolume();
  215. void setVolume(F32 volume);
  216. void setMute(bool mute = true);
  217. void focus(bool focus);
  218. // True if the impl has user focus.
  219. bool hasFocus() const;
  220. void mouseDown(S32 x, S32 y, MASK mask, S32 button = 0);
  221. void mouseUp(S32 x, S32 y, MASK mask, S32 button = 0);
  222. void mouseMove(S32 x, S32 y, MASK mask);
  223. void mouseDown(const LLVector2& texture_coords, MASK mask, S32 button = 0);
  224. void mouseUp(const LLVector2& texture_coords, MASK mask, S32 button = 0);
  225. void mouseMove(const LLVector2& texture_coords, MASK mask);
  226. void mouseDoubleClick(const LLVector2& texture_coords, MASK mask);
  227. void mouseDoubleClick(S32 x, S32 y, MASK mask, S32 button = 0);
  228. void scrollWheel(S32 x, S32 y, S32 scroll_x, S32 scroll_y, MASK mask);
  229. void mouseCapture();
  230. void unload();
  231. void navigateTo(const std::string& url, const std::string& mime_type = "",
  232. bool rediscover_type = false, bool server_request = false,
  233. bool filter_url = true);
  234. void navigateInternal();
  235. void navigateHome();
  236. void navigateStop();
  237. void navigateReload();
  238. void navigateBack();
  239. void navigateForward();
  240. bool handleKeyHere(KEY key, MASK mask);
  241. bool handleKeyUpHere(KEY key, MASK mask);
  242. bool handleUnicodeCharHere(llwchar uni_char);
  243. bool canNavigateForward();
  244. bool canNavigateBack();
  245. LL_INLINE std::string getMediaURL() { return mMediaURL; }
  246. LL_INLINE std::string getHomeURL() { return mHomeURL; }
  247. std::string getCurrentMediaURL();
  248. LL_INLINE std::string getMediaEntryURL() { return mMediaEntryURL; }
  249. void setHomeURL(const std::string& home_url,
  250. const std::string& mime_type = LLStringUtil::null);
  251. void setPageZoomFactor(F64 factor);
  252. LL_INLINE std::string getMimeType() { return mMimeType; }
  253. void scaleMouse(S32* mouse_x, S32* mouse_y);
  254. void scaleTextureCoords(const LLVector2& texture_coords, S32* x, S32* y);
  255. LL_INLINE const LLUUID& getMediaTextureID() { return mTextureId; }
  256. void update();
  257. LL_INLINE void suspendUpdates(bool suspend) { mSuspendUpdates = suspend; };
  258. LL_INLINE bool getVisible() const { return mVisible; }
  259. LL_INLINE bool isVisible() const { return mVisible; }
  260. void setVisible(bool visible);
  261. bool isMediaPlaying();
  262. bool isMediaPaused();
  263. bool hasMedia();
  264. bool isMediaTimeBased();
  265. LL_INLINE bool isMediaFailed() const { return mMediaSourceFailed; }
  266. LL_INLINE void setMediaFailed(bool val) { mMediaSourceFailed = val; }
  267. void setDisabled(bool disabled, bool forcePlayOnEnable = false);
  268. LL_INLINE bool isMediaDisabled() const { return mIsDisabled; }
  269. LL_INLINE void setInNearbyMediaList(bool b) { mInNearbyMediaList = b; }
  270. LL_INLINE bool getInNearbyMediaList() { return mInNearbyMediaList; }
  271. // returns true if this instance should not be loaded (disabled, muted
  272. // object, crashed, etc.)
  273. bool isForcedUnloaded() const;
  274. // returns true if this instance could be playable based on autoplay
  275. // setting, current load state, etc.
  276. bool isPlayable() const;
  277. LL_INLINE void setIsParcelMedia(bool b) { mIsParcelMedia = b; }
  278. LL_INLINE bool isParcelMedia() const { return mIsParcelMedia; }
  279. LL_INLINE ECursorType getLastSetCursor() { return mLastSetCursor; }
  280. void resetPreviousMediaState();
  281. LL_INLINE void setTarget(const std::string& target) { mTarget = target; }
  282. // utility function to create a ready-to-use media instance from a desired media type.
  283. static LLPluginClassMedia* newSourceFromMediaType(std::string media_type,
  284. LLPluginClassMediaOwner* owner, /* may be NULL */
  285. S32 default_width,
  286. S32 default_height,
  287. const std::string target = LLStringUtil::null);
  288. // Need these to handle mouseup...
  289. void onMouseCaptureLost() override;
  290. bool handleMouseUp(S32 x, S32 y, MASK mask) override;
  291. // Grr... the only thing I want as an LLMouseHandler are the
  292. // onMouseCaptureLost and handleMouseUp calls. Sadly, these are all pure
  293. // virtual, so I have to supply implementations here:
  294. LL_INLINE bool handleMouseDown(S32, S32, MASK) override
  295. {
  296. return false;
  297. }
  298. LL_INLINE bool handleHover(S32, S32, MASK) override { return false; }
  299. LL_INLINE bool handleScrollWheel(S32, S32, S32) override
  300. {
  301. return false;
  302. }
  303. LL_INLINE bool handleDoubleClick(S32, S32, MASK) override
  304. {
  305. return false;
  306. }
  307. LL_INLINE bool handleRightMouseDown(S32, S32, MASK) override
  308. {
  309. return false;
  310. }
  311. LL_INLINE bool handleRightMouseUp(S32, S32, MASK) override
  312. {
  313. return false;
  314. }
  315. LL_INLINE bool handleMiddleMouseDown(S32, S32, MASK) override
  316. {
  317. return false;
  318. }
  319. LL_INLINE bool handleMiddleMouseUp(S32, S32, MASK) override
  320. {
  321. return false;
  322. }
  323. LL_INLINE bool handleToolTip(S32, S32, std::string&, LLRect*) override
  324. {
  325. return false;
  326. }
  327. std::string getName() const override;
  328. LL_INLINE bool isView() const override { return false; }
  329. LL_INLINE void screenPointToLocal(S32, S32, S32*, S32*) const override
  330. {
  331. }
  332. LL_INLINE void localPointToScreen(S32, S32, S32*, S32*) const override
  333. {
  334. }
  335. LL_INLINE bool hasMouseCapture() override
  336. {
  337. return gFocusMgr.getMouseCapture() == this;
  338. }
  339. // Inherited from LLPluginClassMediaOwner
  340. void handleMediaEvent(LLPluginClassMedia* self,
  341. LLPluginClassMediaOwner::EMediaEvent) override;
  342. // LLEditMenuHandler overrides
  343. void cut() override;
  344. bool canCut() const override;
  345. void copy() override;
  346. bool canCopy() const override;
  347. void paste() override;
  348. bool canPaste() const override;
  349. void addObject(LLVOVolume* obj);
  350. void removeObject(LLVOVolume* obj);
  351. const std::list<LLVOVolume*>* getObjectList() const;
  352. LLVOVolume* getSomeObject();
  353. LL_INLINE void setUpdated(bool updated) { mIsUpdated = updated; }
  354. LL_INLINE bool isUpdated() { return mIsUpdated; }
  355. // Updates the "interest" value in this object
  356. void calculateInterest();
  357. LL_INLINE F64 getInterest() const { return mInterest; }
  358. F64 getApproximateTextureInterest();
  359. LL_INLINE S32 getProximity() const { return mProximity; }
  360. LL_INLINE F64 getProximityDistance() const { return mProximityDistance; }
  361. // Mark this object as being used in a UI panel instead of on a prim
  362. // This will be used as part of the interest sorting algorithm.
  363. void setUsedInUI(bool used_in_ui);
  364. LL_INLINE bool getUsedInUI() const { return mUsedInUI; }
  365. LL_INLINE void setUsedOnHUD(bool used_on_hud) { mUsedOnHUD = used_on_hud; }
  366. LL_INLINE bool getUsedOnHUD() const { return mUsedOnHUD; }
  367. F64 getCPUUsage() const;
  368. void setPriority(LLPluginClassMedia::EPriority priority);
  369. LL_INLINE LLPluginClassMedia::EPriority getPriority()
  370. {
  371. return mPriority;
  372. }
  373. void setLowPrioritySizeLimit(int size);
  374. void setTextureID(LLUUID id = LLUUID::null);
  375. void setBackgroundColor(LLColor4 color);
  376. LL_INLINE bool isTrustedBrowser() { return mTrustedBrowser; }
  377. LL_INLINE void setTrustedBrowser(bool trusted) { mTrustedBrowser = trusted; }
  378. typedef enum
  379. {
  380. MEDIANAVSTATE_NONE, // State is outside what we need to track for navigation.
  381. MEDIANAVSTATE_BEGUN, // a MEDIA_EVENT_NAVIGATE_BEGIN has been received which was not server-directed
  382. MEDIANAVSTATE_FIRST_LOCATION_CHANGED, // first LOCATION_CHANGED event after a non-server-directed BEGIN
  383. MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS, // Same as above, but the new URL is identical to the previously navigated URL.
  384. MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED, // we received a NAVIGATE_COMPLETE event before the first LOCATION_CHANGED
  385. MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS,// Same as above, but the new URL is identical to the previously navigated URL.
  386. MEDIANAVSTATE_SERVER_SENT, // server-directed nav has been requested, but MEDIA_EVENT_NAVIGATE_BEGIN hasn't been received yet
  387. MEDIANAVSTATE_SERVER_BEGUN, // MEDIA_EVENT_NAVIGATE_BEGIN has been received which was server-directed
  388. MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED, // first LOCATION_CHANGED event after a server-directed BEGIN
  389. MEDIANAVSTATE_SERVER_COMPLETE_BEFORE_LOCATION_CHANGED // we received a NAVIGATE_COMPLETE event before the first LOCATION_CHANGED
  390. } EMediaNavState;
  391. // Returns the current nav state of the media. Note that this will be
  392. // updated BEFORE listeners and objects receive media messages
  393. LL_INLINE EMediaNavState getNavState() { return mMediaNavState; }
  394. void setNavState(EMediaNavState state);
  395. void setNavigateSuspended(bool suspend);
  396. LL_INLINE bool isNavigateSuspended() { return mNavigateSuspended; }
  397. void cancelMimeTypeProbe();
  398. // Is this media attached to an avatar *not* self
  399. bool isAttachedToAnotherAvatar() const;
  400. // Is this media in the agent's parcel ?
  401. bool isInAgentParcel() const;
  402. // get currently active notification associated with this media instance
  403. LLNotificationPtr getCurrentNotification() const;
  404. private:
  405. bool preMediaTexUpdate(LLViewerMediaTexture*& media_tex, U8*& data,
  406. S32& data_width, S32& data_height, S32& x_pos,
  407. S32& y_pos, S32& width, S32& height);
  408. void doMediaTexUpdate(LLViewerMediaTexture* media_tex, U8* data,
  409. S32 data_width, S32 data_height, S32 x_pos,
  410. S32 y_pos, S32 width, S32 height, bool sync);
  411. LLViewerMediaTexture* updateMediaImage();
  412. bool isAutoPlayable() const;
  413. bool shouldShowBasedOnClass() const;
  414. void mimeDiscoveryCoro(std::string url);
  415. public:
  416. LLPluginClassMedia* mMediaSource;
  417. LLUUID mTextureId;
  418. LLNotificationPtr mNotification;
  419. LLColor4 mBackgroundColor;
  420. ECursorType mLastSetCursor;
  421. std::string mMediaURL;
  422. std::string mHomeURL;
  423. // Forced mime type for home url:
  424. std::string mHomeMimeType;
  425. std::string mMimeType;
  426. // The most current media url from the plugin (via the "location changed"
  427. // or "navigate complete" events):
  428. std::string mCurrentMediaURL;
  429. // The MIME type that caused the currently loaded plugin to be loaded:
  430. std::string mCurrentMimeType;
  431. std::string mTarget;
  432. std::string mMediaEntryURL;
  433. LLPluginClassMedia::EPriority mPriority;
  434. // Save the last mouse coord we get, so when we lose capture we can
  435. // simulate a mouseup at that point:
  436. S32 mLastMouseX;
  437. S32 mLastMouseY;
  438. S32 mMediaWidth;
  439. S32 mMediaHeight;
  440. S32 mTextureUsedWidth;
  441. S32 mTextureUsedHeight;
  442. F64 mZoomFactor;
  443. F64 mInterest;
  444. F32 mRequestedVolume;
  445. F32 mPreviousVolume;
  446. F64 mPreviousMediaTime;
  447. F64 mProximityDistance;
  448. F64 mProximityCamera;
  449. S32 mProximity;
  450. S32 mPreviousMediaState;
  451. EMediaNavState mMediaNavState;
  452. bool mMovieImageHasMips;
  453. bool mFilterURL;
  454. bool mMediaAutoScale;
  455. bool mMediaLoop;
  456. bool mNeedsNewTexture;
  457. bool mSuspendUpdates;
  458. bool mTextureUpdatePending;
  459. bool mVisible;
  460. bool mHasFocus;
  461. bool mMediaSourceFailed;
  462. bool mTrustedBrowser;
  463. bool mUsedOnHUD;
  464. bool mUsedInUI;
  465. bool mNavigateRediscoverType;
  466. bool mNavigateServerRequest;
  467. bool mIsMuted;
  468. bool mNeedsMuteCheck;
  469. bool mIsDisabled;
  470. bool mIsParcelMedia;
  471. bool mMediaAutoPlay;
  472. // Used by LLPanelNearbyMedia::refreshList() for performance reasons:
  473. bool mInNearbyMediaList;
  474. bool mNavigateSuspended;
  475. bool mNavigateSuspendedDeferred;
  476. private:
  477. bool mIsUpdated;
  478. std::list<LLVOVolume*> mObjectList;
  479. typedef LLCoreHttpUtil::HttpCoroutineAdapter::wptr_t mime_probe_ptr_t;
  480. mime_probe_ptr_t mMimeProbe;
  481. LLMutex mLock;
  482. };
  483. #endif // LLVIEWERMEDIA_H