| Index: ppapi/proxy/ppb_network_monitor_private_proxy.cc
|
| diff --git a/ppapi/proxy/ppb_network_monitor_private_proxy.cc b/ppapi/proxy/ppb_network_monitor_private_proxy.cc
|
| index 865dc87dfa716207e655e85f59806662b6465411..0d17cd475fb7872f747bf1b2465babfb4482a5b9 100644
|
| --- a/ppapi/proxy/ppb_network_monitor_private_proxy.cc
|
| +++ b/ppapi/proxy/ppb_network_monitor_private_proxy.cc
|
| @@ -7,6 +7,7 @@
|
| #include "ppapi/proxy/enter_proxy.h"
|
| #include "ppapi/proxy/plugin_proxy_delegate.h"
|
| #include "ppapi/proxy/ppapi_messages.h"
|
| +#include "ppapi/shared_impl/proxy_lock.h"
|
| #include "ppapi/thunk/ppb_network_monitor_private_api.h"
|
|
|
| namespace ppapi {
|
| @@ -39,7 +40,13 @@ class PPB_NetworkMonitor_Private_Proxy::NetworkMonitor
|
| return this;
|
| }
|
|
|
| - void OnNetworkListReceived(const scoped_refptr<NetworkListStorage>& list) {
|
| + // This is invoked when a network list is received for this monitor (either
|
| + // initially or on a change). It acquires the ProxyLock inside because
|
| + // ObserverListThreadSafe does not support Bind/Closure, otherwise we would
|
| + // wrap the call with a lock using RunWhileLocked.
|
| + void OnNetworkListReceivedLocks(
|
| + const scoped_refptr<NetworkListStorage>& list) {
|
| + ProxyAutoLock lock;
|
| PP_Resource list_resource =
|
| PPB_NetworkList_Private_Shared::Create(
|
| OBJECT_IS_PROXY, pp_instance(), list);
|
| @@ -70,6 +77,8 @@ PP_Resource PPB_NetworkMonitor_Private_Proxy::CreateProxyResource(
|
| PP_Instance instance,
|
| PPB_NetworkMonitor_Callback callback,
|
| void* user_data) {
|
| + // TODO(dmichael): Check that this thread has a valid message loop associated
|
| + // with it.
|
| if (!callback)
|
| return 0;
|
|
|
| @@ -98,9 +107,9 @@ PP_Resource PPB_NetworkMonitor_Private_Proxy::CreateProxyResource(
|
| // here.
|
| proxy->current_list_ = NULL;
|
| } else if (proxy->current_list_.get()) {
|
| - MessageLoop::current()->PostTask(FROM_HERE, RunWhileLocked(base::Bind(
|
| - &NetworkMonitor::OnNetworkListReceived,
|
| - result->AsWeakPtr(), proxy->current_list_)));
|
| + MessageLoop::current()->PostTask(FROM_HERE, base::Bind(
|
| + &NetworkMonitor::OnNetworkListReceivedLocks,
|
| + result->AsWeakPtr(), proxy->current_list_));
|
| }
|
|
|
| return result->GetReference();
|
| @@ -122,7 +131,7 @@ void PPB_NetworkMonitor_Private_Proxy::OnPluginMsgNetworkList(
|
| const ppapi::NetworkList& list) {
|
| scoped_refptr<NetworkListStorage> list_storage(new NetworkListStorage(list));
|
| current_list_ = list_storage;
|
| - monitors_->Notify(&NetworkMonitor::OnNetworkListReceived, list_storage);
|
| + monitors_->Notify(&NetworkMonitor::OnNetworkListReceivedLocks, list_storage);
|
| }
|
|
|
| void PPB_NetworkMonitor_Private_Proxy::OnNetworkMonitorDeleted(
|
|
|