Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(696)

Unified Diff: chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc

Issue 12153002: Move chrome://media-internals to content. This allows us to hide implementation details from the pu… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698