Index: chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc |
=================================================================== |
--- chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc (revision 179909) |
+++ chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc (working copy) |
@@ -10,7 +10,6 @@ |
#include "chrome/browser/extensions/event_names.h" |
#include "chrome/browser/extensions/event_router.h" |
#include "chrome/browser/extensions/extension_system.h" |
-#include "chrome/browser/media/media_internals.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/profiles/profile_dependency_manager.h" |
#include "chrome/common/chrome_notification_types.h" |
@@ -32,76 +31,16 @@ |
} |
TabCaptureRegistry::TabCaptureRegistry(Profile* profile) |
- : proxy_(new MediaObserverProxy()), profile_(profile) { |
- proxy_->Attach(this); |
+ : profile_(profile) { |
+ MediaCaptureDevicesDispatcher::GetInstance()->AddObserver(this); |
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, |
content::Source<Profile>(profile_)); |
} |
TabCaptureRegistry::~TabCaptureRegistry() { |
- proxy_->Detach(); |
+ MediaCaptureDevicesDispatcher::GetInstance()->RemoveObserver(this); |
} |
-void TabCaptureRegistry::HandleRequestUpdateOnUIThread( |
- int render_process_id, |
- int render_view_id, |
- const content::MediaStreamDevice& device, |
- const content::MediaRequestState new_state) { |
- EventRouter* router = profile_ ? |
- extensions::ExtensionSystem::Get(profile_)->event_router() : NULL; |
- if (!router) |
- return; |
- |
- std::pair<int, int> key = std::make_pair(render_process_id, render_view_id); |
- |
- DeviceCaptureRequestMap::iterator request_it = requests_.find(key); |
- if (request_it == requests_.end()) { |
- LOG(ERROR) << "Receiving updates for invalid tab capture request."; |
- return; |
- } |
- |
- tab_capture::TabCaptureState state = tab_capture::TAB_CAPTURE_STATE_NONE; |
- switch (new_state) { |
- case content::MEDIA_REQUEST_STATE_REQUESTED: |
- state = tab_capture::TAB_CAPTURE_STATE_REQUESTED; |
- break; |
- case content::MEDIA_REQUEST_STATE_PENDING_APPROVAL: |
- state = tab_capture::TAB_CAPTURE_STATE_PENDING; |
- break; |
- case content::MEDIA_REQUEST_STATE_DONE: |
- state = tab_capture::TAB_CAPTURE_STATE_ACTIVE; |
- break; |
- case content::MEDIA_REQUEST_STATE_CLOSING: |
- state = tab_capture::TAB_CAPTURE_STATE_STOPPED; |
- break; |
- case content::MEDIA_REQUEST_STATE_ERROR: |
- state = tab_capture::TAB_CAPTURE_STATE_ERROR; |
- break; |
- default: |
- // TODO(justinlin): Implement muted state notification. |
- break; |
- } |
- |
- if (state == tab_capture::TAB_CAPTURE_STATE_NONE) { |
- // This is a state we don't handle. |
- return; |
- } |
- |
- TabCaptureRegistry::TabCaptureRequest* request_info = &request_it->second; |
- request_info->status = state; |
- |
- scoped_ptr<tab_capture::CaptureInfo> info(new tab_capture::CaptureInfo()); |
- info->tab_id = request_info->tab_id; |
- info->status = request_info->status; |
- |
- scoped_ptr<base::ListValue> args(new ListValue()); |
- args->Append(info->ToValue().release()); |
- scoped_ptr<Event> event(new Event( |
- events::kOnTabCaptureStatusChanged, args.Pass())); |
- event->restrict_to_profile = profile_; |
- router->DispatchEventToExtension(request_info->extension_id, event.Pass()); |
-} |
- |
const TabCaptureRegistry::CaptureRequestList |
TabCaptureRegistry::GetCapturedTabs(const std::string& extension_id) { |
CaptureRequestList list; |
@@ -157,38 +96,12 @@ |
render_process_id, render_view_id)) != requests_.end(); |
} |
-void TabCaptureRegistry::MediaObserverProxy::Attach( |
- TabCaptureRegistry* request_handler) { |
- handler_ = request_handler; |
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
- base::Bind(&TabCaptureRegistry::MediaObserverProxy:: |
- RegisterAsMediaObserverOnIOThread, this, false)); |
-} |
- |
-void TabCaptureRegistry::MediaObserverProxy::Detach() { |
- handler_ = NULL; |
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
- base::Bind(&TabCaptureRegistry::MediaObserverProxy:: |
- RegisterAsMediaObserverOnIOThread, this, true)); |
-} |
- |
-void TabCaptureRegistry::MediaObserverProxy::RegisterAsMediaObserverOnIOThread( |
- bool unregister) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- if (MediaInternals::GetInstance()) { |
- if (!unregister) |
- MediaInternals::GetInstance()->AddObserver(this); |
- else |
- MediaInternals::GetInstance()->RemoveObserver(this); |
- } |
-} |
- |
-void TabCaptureRegistry::MediaObserverProxy::OnRequestUpdate( |
+void TabCaptureRegistry::OnRequestUpdate( |
int render_process_id, |
int render_view_id, |
const content::MediaStreamDevice& device, |
const content::MediaRequestState new_state) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
// TODO(justinlin): We drop audio device events since they will occur in |
// parallel with the video device events (we would get duplicate events). When |
@@ -197,21 +110,59 @@ |
if (device.type != content::MEDIA_TAB_VIDEO_CAPTURE) |
return; |
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
- base::Bind(&TabCaptureRegistry::MediaObserverProxy::UpdateOnUIThread, |
- this, render_process_id, render_view_id, device, new_state)); |
-} |
+ EventRouter* router = profile_ ? |
+ extensions::ExtensionSystem::Get(profile_)->event_router() : NULL; |
+ if (!router) |
+ return; |
-void TabCaptureRegistry::MediaObserverProxy::UpdateOnUIThread( |
- int render_process_id, |
- int render_view_id, |
- const content::MediaStreamDevice& device, |
- const content::MediaRequestState new_state) { |
- if (handler_) |
- handler_->HandleRequestUpdateOnUIThread(render_process_id, |
- render_view_id, |
- device, |
- new_state); |
+ std::pair<int, int> key = std::make_pair(render_process_id, render_view_id); |
+ |
+ DeviceCaptureRequestMap::iterator request_it = requests_.find(key); |
+ if (request_it == requests_.end()) { |
+ LOG(ERROR) << "Receiving updates for invalid tab capture request."; |
+ return; |
+ } |
+ |
+ tab_capture::TabCaptureState state = tab_capture::TAB_CAPTURE_STATE_NONE; |
+ switch (new_state) { |
+ case content::MEDIA_REQUEST_STATE_REQUESTED: |
+ state = tab_capture::TAB_CAPTURE_STATE_REQUESTED; |
+ break; |
+ case content::MEDIA_REQUEST_STATE_PENDING_APPROVAL: |
+ state = tab_capture::TAB_CAPTURE_STATE_PENDING; |
+ break; |
+ case content::MEDIA_REQUEST_STATE_DONE: |
+ state = tab_capture::TAB_CAPTURE_STATE_ACTIVE; |
+ break; |
+ case content::MEDIA_REQUEST_STATE_CLOSING: |
+ state = tab_capture::TAB_CAPTURE_STATE_STOPPED; |
+ break; |
+ case content::MEDIA_REQUEST_STATE_ERROR: |
+ state = tab_capture::TAB_CAPTURE_STATE_ERROR; |
+ break; |
+ default: |
scherkus (not reviewing)
2013/02/01 02:05:17
nit: while you're here can you replace the default
jam
2013/02/01 02:18:22
These don't have equivalent values int the tab_cap
|
+ // TODO(justinlin): Implement muted state notification. |
+ break; |
+ } |
+ |
+ if (state == tab_capture::TAB_CAPTURE_STATE_NONE) { |
+ // This is a state we don't handle. |
+ return; |
+ } |
+ |
+ TabCaptureRegistry::TabCaptureRequest* request_info = &request_it->second; |
+ request_info->status = state; |
+ |
+ scoped_ptr<tab_capture::CaptureInfo> info(new tab_capture::CaptureInfo()); |
+ info->tab_id = request_info->tab_id; |
+ info->status = request_info->status; |
+ |
+ scoped_ptr<base::ListValue> args(new ListValue()); |
+ args->Append(info->ToValue().release()); |
+ scoped_ptr<Event> event(new Event( |
+ events::kOnTabCaptureStatusChanged, args.Pass())); |
+ event->restrict_to_profile = profile_; |
+ router->DispatchEventToExtension(request_info->extension_id, event.Pass()); |
} |
} // namespace extensions |