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..68b159901652df27988b55675af0db7349332adf 100644 |
| --- a/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc |
| +++ b/content/browser/renderer_host/pepper/browser_ppapi_host_impl.cc |
| @@ -99,8 +99,8 @@ bool BrowserPpapiHostImpl::GetRenderFrameIDsForInstance( |
| return false; |
| } |
| - *render_process_id = found->second.render_process_id; |
| - *render_frame_id = found->second.render_frame_id; |
| + *render_process_id = found->second.renderer_data.render_process_id; |
| + *render_frame_id = found->second.renderer_data.render_frame_id; |
| return true; |
| } |
| @@ -120,14 +120,14 @@ GURL BrowserPpapiHostImpl::GetDocumentURLForInstance(PP_Instance instance) { |
| InstanceMap::const_iterator found = instance_map_.find(instance); |
| if (found == instance_map_.end()) |
| return GURL(); |
| - return found->second.document_url; |
| + return found->second.renderer_data.document_url; |
| } |
| GURL BrowserPpapiHostImpl::GetPluginURLForInstance(PP_Instance instance) { |
| InstanceMap::const_iterator found = instance_map_.find(instance); |
| if (found == instance_map_.end()) |
| return GURL(); |
| - return found->second.plugin_url; |
| + return found->second.renderer_data.plugin_url; |
| } |
| void BrowserPpapiHostImpl::SetOnKeepaliveCallback( |
| @@ -139,7 +139,9 @@ void BrowserPpapiHostImpl::AddInstance( |
| PP_Instance instance, |
| const PepperRendererInstanceData& instance_data) { |
| DCHECK(instance_map_.find(instance) == instance_map_.end()); |
| - instance_map_[instance] = instance_data; |
| + instance_map_[instance].renderer_data = instance_data; |
| + instance_map_[instance].observer_list.reset( |
| + new ObserverList<InstanceObserver>()); |
|
dmichael (off chromium)
2015/02/18 18:58:09
If you use map::insert, I believe your value type
tommycli
2015/02/18 19:19:09
Hey, I tried what you recommended in PS6, but I co
dmichael (off chromium)
2015/02/18 20:31:39
Bummer.
How about ScoperPtrHashMap instead, then?
tommycli
2015/02/18 21:31:17
Done.
|
| } |
| void BrowserPpapiHostImpl::DeleteInstance(PP_Instance instance) { |
| @@ -151,6 +153,38 @@ void BrowserPpapiHostImpl::DeleteInstance(PP_Instance instance) { |
| instance_map_.erase(found); |
| } |
| +void BrowserPpapiHostImpl::AddInstanceObserver(PP_Instance instance, |
| + InstanceObserver* observer) { |
| + DCHECK(instance_map_.find(instance) != instance_map_.end()); |
| + instance_map_[instance].observer_list->AddObserver(observer); |
| +} |
| + |
| +void BrowserPpapiHostImpl::RemoveInstanceObserver(PP_Instance instance, |
| + InstanceObserver* observer) { |
| + InstanceMap::iterator found = instance_map_.find(instance); |
| + if (found != instance_map_.end()) { |
| + found->second.observer_list->RemoveObserver(observer); |
| + } |
| +} |
| + |
| +void BrowserPpapiHostImpl::OnThrottleStateChanged(PP_Instance instance, |
| + bool is_throttled) { |
| + auto found = instance_map_.find(instance); |
| + if (found != instance_map_.end()) { |
| + found->second.is_throttled = is_throttled; |
| + FOR_EACH_OBSERVER(InstanceObserver, *(found->second.observer_list), |
| + OnThrottleStateChanged(is_throttled)); |
| + } |
| +} |
| + |
| +bool BrowserPpapiHostImpl::IsThrottled(PP_Instance instance) const { |
| + auto found = instance_map_.find(instance); |
| + if (found != instance_map_.end()) { |
| + return found->second.is_throttled; |
| + } |
| + return false; |
| +} |
| + |
| BrowserPpapiHostImpl::HostMessageFilter::HostMessageFilter( |
| ppapi::host::PpapiHost* ppapi_host, |
| BrowserPpapiHostImpl* browser_ppapi_host_impl) |
| @@ -192,6 +226,12 @@ void BrowserPpapiHostImpl::HostMessageFilter::OnHostMsgLogInterfaceUsage( |
| UMA_HISTOGRAM_SPARSE_SLOWLY("Pepper.InterfaceUsed", hash); |
| } |
| +BrowserPpapiHostImpl::InstanceData::InstanceData() : 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 |
| @@ -209,9 +249,11 @@ void BrowserPpapiHostImpl::OnKeepalive() { |
| InstanceMap::iterator 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; |
| } |