Chromium Code Reviews| Index: content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc |
| diff --git a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc |
| index d9539ee5c59bcb527fa3dd9fa743fdfc9b5ac93e..184104f4f474c5ad443733ab5b011210cf953818 100644 |
| --- a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc |
| +++ b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc |
| @@ -85,22 +85,22 @@ const base::Process& BrowserPpapiHostImpl::GetPluginProcess() const { |
| } |
| bool BrowserPpapiHostImpl::IsValidInstance(PP_Instance instance) const { |
| - return instance_map_.find(instance) != instance_map_.end(); |
| + return instance_map_.contains(instance); |
| } |
| bool BrowserPpapiHostImpl::GetRenderFrameIDsForInstance( |
| PP_Instance instance, |
| int* render_process_id, |
| int* render_frame_id) const { |
| - InstanceMap::const_iterator found = instance_map_.find(instance); |
| - if (found == instance_map_.end()) { |
| + auto* data = instance_map_.get(instance); |
| + if (data == nullptr) { |
| *render_process_id = 0; |
| *render_frame_id = 0; |
| return false; |
| } |
| - *render_process_id = found->second.render_process_id; |
| - *render_frame_id = found->second.render_frame_id; |
| + *render_process_id = data->renderer_data.render_process_id; |
| + *render_frame_id = data->renderer_data.render_frame_id; |
| return true; |
| } |
| @@ -117,17 +117,17 @@ const base::FilePath& BrowserPpapiHostImpl::GetProfileDataDirectory() { |
| } |
| GURL BrowserPpapiHostImpl::GetDocumentURLForInstance(PP_Instance instance) { |
| - InstanceMap::const_iterator found = instance_map_.find(instance); |
| - if (found == instance_map_.end()) |
| + auto* data = instance_map_.get(instance); |
| + if (data == nullptr) |
| return GURL(); |
| - return found->second.document_url; |
| + return data->renderer_data.document_url; |
| } |
| GURL BrowserPpapiHostImpl::GetPluginURLForInstance(PP_Instance instance) { |
| - InstanceMap::const_iterator found = instance_map_.find(instance); |
| - if (found == instance_map_.end()) |
| + auto* data = instance_map_.get(instance); |
| + if (data == nullptr) |
| return GURL(); |
| - return found->second.plugin_url; |
| + return data->renderer_data.plugin_url; |
| } |
| void BrowserPpapiHostImpl::SetOnKeepaliveCallback( |
| @@ -137,18 +137,45 @@ void BrowserPpapiHostImpl::SetOnKeepaliveCallback( |
| void BrowserPpapiHostImpl::AddInstance( |
| PP_Instance instance, |
| - const PepperRendererInstanceData& instance_data) { |
| - DCHECK(instance_map_.find(instance) == instance_map_.end()); |
| - instance_map_[instance] = instance_data; |
| + const PepperRendererInstanceData& renderer_instance_data) { |
| + DCHECK(!instance_map_.contains(instance)); |
| + instance_map_.add(instance, |
| + make_scoped_ptr(new InstanceData(renderer_instance_data))); |
| } |
| void BrowserPpapiHostImpl::DeleteInstance(PP_Instance instance) { |
| - InstanceMap::iterator found = instance_map_.find(instance); |
| - if (found == instance_map_.end()) { |
| - NOTREACHED(); |
| - return; |
| + int erased = instance_map_.erase(instance); |
| + DCHECK_EQ(1, erased); |
| +} |
| + |
| +void BrowserPpapiHostImpl::AddInstanceObserver(PP_Instance instance, |
| + InstanceObserver* observer) { |
| + instance_map_.get(instance)->observer_list.AddObserver(observer); |
| +} |
| + |
| +void BrowserPpapiHostImpl::RemoveInstanceObserver(PP_Instance instance, |
| + InstanceObserver* observer) { |
| + auto* data = instance_map_.get(instance); |
| + if (data != nullptr) |
| + data->observer_list.RemoveObserver(observer); |
| +} |
| + |
| +void BrowserPpapiHostImpl::OnThrottleStateChanged(PP_Instance instance, |
| + bool is_throttled) { |
| + auto* data = instance_map_.get(instance); |
| + if (data != nullptr) { |
| + data->is_throttled = is_throttled; |
| + FOR_EACH_OBSERVER(InstanceObserver, data->observer_list, |
| + OnThrottleStateChanged(is_throttled)); |
| } |
| - instance_map_.erase(found); |
| +} |
| + |
| +bool BrowserPpapiHostImpl::IsThrottled(PP_Instance instance) const { |
| + auto* data = instance_map_.get(instance); |
| + if (data != nullptr) |
|
dmichael (off chromium)
2015/02/18 22:32:37
nit: I'd just write:
if (data)
tommycli
2015/02/18 22:56:44
Done.
|
| + return data->is_throttled; |
| + |
| + return false; |
| } |
| BrowserPpapiHostImpl::HostMessageFilter::HostMessageFilter( |
| @@ -192,6 +219,14 @@ void BrowserPpapiHostImpl::HostMessageFilter::OnHostMsgLogInterfaceUsage( |
| UMA_HISTOGRAM_SPARSE_SLOWLY("Pepper.InterfaceUsed", hash); |
| } |
| +BrowserPpapiHostImpl::InstanceData::InstanceData( |
| + const PepperRendererInstanceData& renderer_data) |
| + : renderer_data(renderer_data), is_throttled(false) { |
| +} |
| + |
| +BrowserPpapiHostImpl::InstanceData::~InstanceData() { |
| +} |
| + |
| void BrowserPpapiHostImpl::OnKeepalive() { |
| // An instance has been active. The on_keepalive_callback_ will be |
| // used to permit the content embedder to handle this, e.g. by tracking |
| @@ -206,12 +241,15 @@ void BrowserPpapiHostImpl::OnKeepalive() { |
| BrowserPpapiHost::OnKeepaliveInstanceData instance_data(instance_map_.size()); |
| - InstanceMap::iterator instance = instance_map_.begin(); |
| + auto instance = instance_map_.begin(); |
| int i = 0; |
| while (instance != instance_map_.end()) { |
| - instance_data[i].render_process_id = instance->second.render_process_id; |
| - instance_data[i].render_frame_id = instance->second.render_frame_id; |
| - instance_data[i].document_url = instance->second.document_url; |
| + instance_data[i].render_process_id = |
| + instance->second->renderer_data.render_process_id; |
| + instance_data[i].render_frame_id = |
| + instance->second->renderer_data.render_frame_id; |
| + instance_data[i].document_url = |
| + instance->second->renderer_data.document_url; |
| ++instance; |
| ++i; |
| } |