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..bdecda596e86efeece363fd4b006ca5520822351 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; |
+ 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; |
} |