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; |
} |