Chromium Code Reviews| Index: chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc |
| diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc |
| index 3953de0049b504fe7a8da84bd7b802e03a3f007a..58a6c888e4b73d7991d8a2562276e45b7b14151d 100644 |
| --- a/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc |
| +++ b/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc |
| @@ -4,6 +4,8 @@ |
| #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h" |
| +#include <utility> |
| + |
| #include "content/public/browser/browser_thread.h" |
| #include "chrome/browser/extensions/event_names.h" |
| #include "chrome/browser/extensions/event_router.h" |
| @@ -21,6 +23,14 @@ using content::BrowserThread; |
| namespace extensions { |
| +TabCaptureRegistry::TabCaptureRequest::TabCaptureRequest( |
| + std::string extension_id, int tab_id, tab_capture::TabCaptureState status) |
| + : extension_id(extension_id), tab_id(tab_id), status(status) { |
| +} |
| + |
| +TabCaptureRegistry::TabCaptureRequest::~TabCaptureRequest() { |
| +} |
| + |
| TabCaptureRegistry::TabCaptureRegistry(Profile* profile) |
| : proxy_(new MediaObserverProxy()), profile_(profile) { |
| proxy_->Attach(this); |
| @@ -44,7 +54,8 @@ void TabCaptureRegistry::HandleRequestUpdateOnUIThread( |
| std::pair<int, int> key = std::make_pair(render_process_id, render_view_id); |
| - if (requests_.find(key) == requests_.end()) { |
| + DeviceCaptureRequestMap::iterator request_it = requests_.find(key); |
| + if (request_it == requests_.end()) { |
| LOG(ERROR) << "Receiving updates for invalid tab capture request."; |
| return; |
| } |
| @@ -77,19 +88,19 @@ void TabCaptureRegistry::HandleRequestUpdateOnUIThread( |
| return; |
| } |
| - TabCaptureRegistry::TabCaptureRequest& request_info = requests_[key]; |
| - request_info.status = state; |
| + 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; |
| + 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()); |
| + router->DispatchEventToExtension(request_info->extension_id, event.Pass()); |
| } |
| const TabCaptureRegistry::CaptureRequestList |
| @@ -130,13 +141,14 @@ void TabCaptureRegistry::Observe(int type, |
| bool TabCaptureRegistry::AddRequest(const std::pair<int, int> key, |
| const TabCaptureRequest& request) { |
| // Currently, we do not allow multiple active captures for same tab. |
| - if (requests_.find(key) != requests_.end()) |
| - if (requests_[key].status != |
| - tab_capture::TAB_CAPTURE_TAB_CAPTURE_STATE_STOPPED && |
| - requests_[key].status != |
| - tab_capture::TAB_CAPTURE_TAB_CAPTURE_STATE_ERROR) |
| + DeviceCaptureRequestMap::iterator it = requests_.find(key); |
| + if (it != requests_.end()) { |
| + const tab_capture::TabCaptureState& state = it->second.status; |
|
Matt Perry
2013/01/04 22:21:35
actually TabCaptureState is just an enum, so takin
kmadhusu
2013/01/04 22:31:06
justinlin@: Since it is an enum, please ignore my
justinlin
2013/01/04 22:45:21
Done.
|
| + if (state != tab_capture::TAB_CAPTURE_TAB_CAPTURE_STATE_STOPPED && |
| + state != tab_capture::TAB_CAPTURE_TAB_CAPTURE_STATE_ERROR) |
| return false; |
| - requests_[key] = request; |
| + } |
| + requests_.insert(std::make_pair(key, request)); |
| return true; |
| } |