summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/chrome_renderer.gypi1
-rw-r--r--chrome/renderer/chrome_ppb_pdf_impl.cc21
-rw-r--r--content/ppapi_plugin/ppapi_thread.h4
-rw-r--r--ppapi/ppapi_proxy.gypi2
-rw-r--r--ppapi/ppapi_shared.gypi2
-rw-r--r--ppapi/ppapi_tests.gypi5
-rw-r--r--ppapi/proxy/enter_proxy.h5
-rw-r--r--ppapi/proxy/plugin_globals.cc31
-rw-r--r--ppapi/proxy/plugin_globals.h51
-rw-r--r--ppapi/proxy/plugin_resource_tracker.cc31
-rw-r--r--ppapi/proxy/plugin_resource_tracker.h38
-rw-r--r--ppapi/proxy/plugin_var_serialization_rules.cc4
-rw-r--r--ppapi/proxy/ppapi_proxy_test.cc11
-rw-r--r--ppapi/proxy/ppapi_proxy_test.h13
-rw-r--r--ppapi/proxy/ppb_audio_proxy.cc7
-rw-r--r--ppapi/proxy/ppb_core_proxy.cc5
-rw-r--r--ppapi/proxy/ppb_cursor_control_proxy.cc5
-rw-r--r--ppapi/proxy/ppb_file_chooser_proxy.cc4
-rw-r--r--ppapi/proxy/ppb_file_ref_proxy.cc4
-rw-r--r--ppapi/proxy/ppb_flash_file_proxy.cc7
-rw-r--r--ppapi/proxy/ppb_flash_proxy.cc7
-rw-r--r--ppapi/proxy/ppb_graphics_2d_proxy.cc8
-rw-r--r--ppapi/proxy/ppb_instance_proxy.cc5
-rw-r--r--ppapi/proxy/ppb_testing_proxy.cc9
-rw-r--r--ppapi/proxy/ppb_url_loader_proxy.cc4
-rw-r--r--ppapi/proxy/ppb_var_deprecated_proxy.cc10
-rw-r--r--ppapi/proxy/ppb_var_proxy.cc8
-rw-r--r--ppapi/proxy/ppb_video_capture_proxy.cc42
-rw-r--r--ppapi/proxy/ppp_instance_private_proxy_unittest.cc2
-rw-r--r--ppapi/proxy/ppp_instance_proxy.cc7
-rw-r--r--ppapi/proxy/ppp_messaging_proxy.cc4
-rw-r--r--ppapi/proxy/ppp_video_decoder_proxy.cc11
-rw-r--r--ppapi/shared_impl/ppapi_globals.cc23
-rw-r--r--ppapi/shared_impl/ppapi_globals.h36
-rw-r--r--ppapi/shared_impl/resource.cc10
-rw-r--r--ppapi/shared_impl/resource_tracker_unittest.cc11
-rw-r--r--ppapi/shared_impl/scoped_pp_resource.cc6
-rw-r--r--ppapi/shared_impl/test_globals.cc23
-rw-r--r--ppapi/shared_impl/test_globals.h35
-rw-r--r--ppapi/shared_impl/tracker_base.h3
-rw-r--r--ppapi/shared_impl/url_util_impl.cc3
-rw-r--r--ppapi/shared_impl/var.cc6
-rw-r--r--ppapi/shared_impl/video_decoder_impl.cc4
-rw-r--r--ppapi/thunk/enter.h8
-rw-r--r--webkit/glue/webkit_glue.gypi2
-rw-r--r--webkit/plugins/ppapi/callbacks_unittest.cc7
-rw-r--r--webkit/plugins/ppapi/host_globals.cc31
-rw-r--r--webkit/plugins/ppapi/host_globals.h44
-rw-r--r--webkit/plugins/ppapi/npapi_glue.cc16
-rw-r--r--webkit/plugins/ppapi/npobject_var.cc8
-rw-r--r--webkit/plugins/ppapi/plugin_module.cc25
-rw-r--r--webkit/plugins/ppapi/plugin_object.cc6
-rw-r--r--webkit/plugins/ppapi/ppapi_plugin_instance.cc15
-rw-r--r--webkit/plugins/ppapi/ppb_audio_impl.cc3
-rw-r--r--webkit/plugins/ppapi/ppb_directory_reader_impl.cc8
-rw-r--r--webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc7
-rw-r--r--webkit/plugins/ppapi/ppb_flash_file_impl.cc19
-rw-r--r--webkit/plugins/ppapi/ppb_flash_impl.cc13
-rw-r--r--webkit/plugins/ppapi/ppb_proxy_impl.cc20
-rw-r--r--webkit/plugins/ppapi/ppb_var_impl.cc19
-rw-r--r--webkit/plugins/ppapi/ppb_video_capture_impl.cc6
-rw-r--r--webkit/plugins/ppapi/quota_file_io.cc4
-rw-r--r--webkit/plugins/ppapi/resource_helper.cc3
-rw-r--r--webkit/plugins/ppapi/resource_tracker.cc36
-rw-r--r--webkit/plugins/ppapi/resource_tracker.h41
-rw-r--r--webkit/plugins/ppapi/resource_tracker_unittest.cc22
66 files changed, 561 insertions, 330 deletions
diff --git a/chrome/chrome_renderer.gypi b/chrome/chrome_renderer.gypi
index a87506a..0e83f01 100644
--- a/chrome/chrome_renderer.gypi
+++ b/chrome/chrome_renderer.gypi
@@ -16,6 +16,7 @@
'../content/content.gyp:content_renderer',
'../net/net.gyp:net',
'../ppapi/ppapi_internal.gyp:ppapi_proxy',
+ '../ppapi/ppapi_internal.gyp:ppapi_shared',
'../printing/printing.gyp:printing',
'../skia/skia.gyp:skia',
'../third_party/cld/cld.gyp:cld',
diff --git a/chrome/renderer/chrome_ppb_pdf_impl.cc b/chrome/renderer/chrome_ppb_pdf_impl.cc
index e9b5174..3a39f25 100644
--- a/chrome/renderer/chrome_ppb_pdf_impl.cc
+++ b/chrome/renderer/chrome_ppb_pdf_impl.cc
@@ -29,12 +29,15 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#include "unicode/usearch.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/plugin_delegate.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
#include "webkit/plugins/ppapi/ppb_image_data_impl.h"
#include "webkit/plugins/ppapi/resource_tracker.h"
+using ppapi::PpapiGlobals;
+using webkit::ppapi::HostGlobals;
using WebKit::WebView;
using content::RenderThread;
@@ -123,7 +126,7 @@ static const ResourceImageInfo kResourceImageMap[] = {
PP_Var GetLocalizedString(PP_Instance instance_id,
PP_ResourceString string_id) {
webkit::ppapi::PluginInstance* instance =
- webkit::ppapi::ResourceTracker::Get()->GetInstance(instance_id);
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return PP_MakeUndefined();
@@ -159,7 +162,7 @@ PP_Resource GetResourceImage(PP_Instance instance_id,
ResourceBundle::GetSharedInstance().GetBitmapNamed(res_id);
// Validate the instance.
- if (!webkit::ppapi::ResourceTracker::Get()->GetInstance(instance_id))
+ if (!HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id))
return 0;
scoped_refptr<webkit::ppapi::PPB_ImageData_Impl> image_data(
new webkit::ppapi::PPB_ImageData_Impl(instance_id));
@@ -187,7 +190,7 @@ PP_Resource GetFontFileWithFallback(
PP_PrivateFontCharset charset) {
#if defined(OS_LINUX)
// Validate the instance before using it below.
- if (!webkit::ppapi::ResourceTracker::Get()->GetInstance(instance_id))
+ if (!HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id))
return 0;
scoped_refptr<ppapi::StringVar> face_name(ppapi::StringVar::FromPPVar(
@@ -219,7 +222,7 @@ bool GetFontTableForPrivateFontFile(PP_Resource font_file,
uint32_t* output_length) {
#if defined(OS_LINUX)
ppapi::Resource* resource =
- ppapi::TrackerBase::Get()->GetResourceTracker()->GetResource(font_file);
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(font_file);
if (!resource)
return false;
@@ -282,7 +285,7 @@ void SearchString(PP_Instance instance,
void DidStartLoading(PP_Instance instance_id) {
webkit::ppapi::PluginInstance* instance =
- webkit::ppapi::ResourceTracker::Get()->GetInstance(instance_id);
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return;
instance->delegate()->DidStartLoading();
@@ -290,7 +293,7 @@ void DidStartLoading(PP_Instance instance_id) {
void DidStopLoading(PP_Instance instance_id) {
webkit::ppapi::PluginInstance* instance =
- webkit::ppapi::ResourceTracker::Get()->GetInstance(instance_id);
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return;
instance->delegate()->DidStopLoading();
@@ -298,7 +301,7 @@ void DidStopLoading(PP_Instance instance_id) {
void SetContentRestriction(PP_Instance instance_id, int restrictions) {
webkit::ppapi::PluginInstance* instance =
- webkit::ppapi::ResourceTracker::Get()->GetInstance(instance_id);
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return;
instance->delegate()->SetContentRestriction(restrictions);
@@ -317,7 +320,7 @@ void UserMetricsRecordAction(PP_Var action) {
void HasUnsupportedFeature(PP_Instance instance_id) {
webkit::ppapi::PluginInstance* instance =
- webkit::ppapi::ResourceTracker::Get()->GetInstance(instance_id);
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return;
@@ -333,7 +336,7 @@ void HasUnsupportedFeature(PP_Instance instance_id) {
void SaveAs(PP_Instance instance_id) {
webkit::ppapi::PluginInstance* instance =
- webkit::ppapi::ResourceTracker::Get()->GetInstance(instance_id);
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return;
instance->delegate()->SaveURLAs(instance->plugin_url());
diff --git a/content/ppapi_plugin/ppapi_thread.h b/content/ppapi_plugin/ppapi_thread.h
index cc58362..430e168 100644
--- a/content/ppapi_plugin/ppapi_thread.h
+++ b/content/ppapi_plugin/ppapi_thread.h
@@ -18,6 +18,7 @@
#include "ppapi/c/pp_module.h"
#include "ppapi/c/trusted/ppp_broker.h"
#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
class FilePath;
class PpapiWebKitThread;
@@ -66,6 +67,9 @@ class PpapiThread : public ChildThread,
base::ScopedNativeLibrary library_;
+ // Global state tracking for the proxy.
+ ppapi::proxy::PluginGlobals plugin_globals_;
+
ppapi::proxy::Dispatcher::GetInterfaceFunc get_plugin_interface_;
// Callback to call when a new instance connects to the broker.
diff --git a/ppapi/ppapi_proxy.gypi b/ppapi/ppapi_proxy.gypi
index 8630cf9..257d336 100644
--- a/ppapi/ppapi_proxy.gypi
+++ b/ppapi/ppapi_proxy.gypi
@@ -44,6 +44,8 @@
'proxy/interface_proxy.h',
'proxy/plugin_dispatcher.cc',
'proxy/plugin_dispatcher.h',
+ 'proxy/plugin_globals.cc',
+ 'proxy/plugin_globals.h',
'proxy/plugin_message_filter.cc',
'proxy/plugin_message_filter.h',
'proxy/plugin_resource_tracker.cc',
diff --git a/ppapi/ppapi_shared.gypi b/ppapi/ppapi_shared.gypi
index b6399eb..80055ae 100644
--- a/ppapi/ppapi_shared.gypi
+++ b/ppapi/ppapi_shared.gypi
@@ -56,6 +56,8 @@
'shared_impl/memory_impl.cc',
'shared_impl/opengles2_impl.cc',
'shared_impl/opengles2_impl.h',
+ 'shared_impl/ppapi_globals.cc',
+ 'shared_impl/ppapi_globals.h',
'shared_impl/ppapi_preferences.cc',
'shared_impl/ppapi_preferences.h',
'shared_impl/ppp_instance_combined.cc',
diff --git a/ppapi/ppapi_tests.gypi b/ppapi/ppapi_tests.gypi
index b7999b3..625a06d 100644
--- a/ppapi/ppapi_tests.gypi
+++ b/ppapi/ppapi_tests.gypi
@@ -137,7 +137,8 @@
'tests/test_var_deprecated.h',
],
'dependencies': [
- 'ppapi.gyp:ppapi_cpp'
+ 'ppapi.gyp:ppapi_cpp',
+ 'ppapi_internal.gyp:ppapi_shared',
],
'run_as': {
'action': [
@@ -218,6 +219,8 @@
'proxy/ppp_messaging_proxy_unittest.cc',
'proxy/serialized_var_unittest.cc',
'shared_impl/resource_tracker_unittest.cc',
+ 'shared_impl/test_globals.cc',
+ 'shared_impl/test_globals.h',
],
},
{
diff --git a/ppapi/proxy/enter_proxy.h b/ppapi/proxy/enter_proxy.h
index d7bf7c2..96ac0c18 100644
--- a/ppapi/proxy/enter_proxy.h
+++ b/ppapi/proxy/enter_proxy.h
@@ -9,6 +9,7 @@
#include "ppapi/cpp/completion_callback.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/thunk/enter.h"
@@ -32,8 +33,8 @@ class EnterPluginFromHostResource
public:
EnterPluginFromHostResource(const HostResource& host_resource)
: thunk::EnterResourceNoLock<ResourceT>(
- PluginResourceTracker::GetInstance()->PluginResourceForHostResource(
- host_resource),
+ PluginGlobals::Get()->plugin_resource_tracker()->
+ PluginResourceForHostResource(host_resource),
false) {
// Validate that we're in the plugin rather than the host. Otherwise this
// object will do the wrong thing. In the plugin, the instance should have
diff --git a/ppapi/proxy/plugin_globals.cc b/ppapi/proxy/plugin_globals.cc
new file mode 100644
index 0000000..888c3bd
--- /dev/null
+++ b/ppapi/proxy/plugin_globals.cc
@@ -0,0 +1,31 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/proxy/plugin_globals.h"
+
+namespace ppapi {
+namespace proxy {
+
+PluginGlobals* PluginGlobals::plugin_globals_ = NULL;
+
+PluginGlobals::PluginGlobals() : ppapi::PpapiGlobals() {
+ DCHECK(!plugin_globals_);
+ plugin_globals_ = this;
+}
+
+PluginGlobals::~PluginGlobals() {
+ DCHECK(plugin_globals_ == this);
+ plugin_globals_ = NULL;
+}
+
+ResourceTracker* PluginGlobals::GetResourceTracker() {
+ return &plugin_resource_tracker_;
+}
+
+VarTracker* PluginGlobals::GetVarTracker() {
+ return &plugin_var_tracker_;
+}
+
+} // namespace proxy
+} // namespace ppapi
diff --git a/ppapi/proxy/plugin_globals.h b/ppapi/proxy/plugin_globals.h
new file mode 100644
index 0000000..70dea89
--- /dev/null
+++ b/ppapi/proxy/plugin_globals.h
@@ -0,0 +1,51 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PPAPI_PROXY_PLUGIN_GLOBALS_H_
+#define PPAPI_PROXY_PLUGIN_GLOBALS_H_
+
+#include "base/compiler_specific.h"
+#include "ppapi/proxy/plugin_resource_tracker.h"
+#include "ppapi/proxy/plugin_var_tracker.h"
+#include "ppapi/proxy/ppapi_proxy_export.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
+
+namespace ppapi {
+namespace proxy {
+
+class PPAPI_PROXY_EXPORT PluginGlobals : public PpapiGlobals {
+ public:
+ PluginGlobals();
+ virtual ~PluginGlobals();
+
+ // Getter for the global singleton. Generally, you should use
+ // PpapiGlobals::Get() when possible. Use this only when you need some
+ // plugin-specific functionality.
+ inline static PluginGlobals* Get() { return plugin_globals_; }
+
+ // PpapiGlobals implementation.
+ virtual ResourceTracker* GetResourceTracker() OVERRIDE;
+ virtual VarTracker* GetVarTracker() OVERRIDE;
+
+ // Getters for the plugin-specific versions.
+ PluginResourceTracker* plugin_resource_tracker() {
+ return &plugin_resource_tracker_;
+ }
+ PluginVarTracker* plugin_var_tracker() {
+ return &plugin_var_tracker_;
+ }
+
+ private:
+ static PluginGlobals* plugin_globals_;
+
+ PluginResourceTracker plugin_resource_tracker_;
+ PluginVarTracker plugin_var_tracker_;
+
+ DISALLOW_COPY_AND_ASSIGN(PluginGlobals);
+};
+
+} // namespace proxy
+} // namespace ppapi
+
+#endif // PPAPI_PROXY_PLUGIN_GLOBALS_H_
diff --git a/ppapi/proxy/plugin_resource_tracker.cc b/ppapi/proxy/plugin_resource_tracker.cc
index 4abd8f7..67e2d69 100644
--- a/ppapi/proxy/plugin_resource_tracker.cc
+++ b/ppapi/proxy/plugin_resource_tracker.cc
@@ -7,6 +7,7 @@
#include "base/logging.h"
#include "base/memory/singleton.h"
#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/serialized_var.h"
#include "ppapi/shared_impl/proxy_lock.h"
@@ -19,17 +20,13 @@ namespace proxy {
namespace {
-// When non-NULL, this object overrides the ResourceTrackerSingleton.
-PluginResourceTracker* g_resource_tracker_override = NULL;
-
TrackerBase* GetTrackerBase() {
- return PluginResourceTracker::GetInstance();
+ return PluginGlobals::Get()->plugin_resource_tracker();
}
} // namespace
-PluginResourceTracker::PluginResourceTracker()
- : var_tracker_test_override_(NULL) {
+PluginResourceTracker::PluginResourceTracker() {
#ifdef ENABLE_PEPPER_THREADING
// Set the global proxy lock, since the plugin-side of the proxy needs to be
// synchronized.
@@ -44,20 +41,8 @@ PluginResourceTracker::~PluginResourceTracker() {
}
// static
-void PluginResourceTracker::SetInstanceForTest(PluginResourceTracker* tracker) {
- g_resource_tracker_override = tracker;
-}
-
-// static
-PluginResourceTracker* PluginResourceTracker::GetInstance() {
- if (g_resource_tracker_override)
- return g_resource_tracker_override;
- return Singleton<PluginResourceTracker>::get();
-}
-
-// static
TrackerBase* PluginResourceTracker::GetTrackerBaseInstance() {
- return GetInstance();
+ return GetTrackerBase();
}
PP_Resource PluginResourceTracker::PluginResourceForHostResource(
@@ -76,14 +61,6 @@ FunctionGroupBase* PluginResourceTracker::GetFunctionAPI(PP_Instance inst,
return NULL;
}
-VarTracker* PluginResourceTracker::GetVarTracker() {
- return &var_tracker();
-}
-
-ResourceTracker* PluginResourceTracker::GetResourceTracker() {
- return this;
-}
-
PP_Module PluginResourceTracker::GetModuleForInstance(PP_Instance instance) {
// Currently proxied plugins don't use the PP_Module for anything useful.
return 0;
diff --git a/ppapi/proxy/plugin_resource_tracker.h b/ppapi/proxy/plugin_resource_tracker.h
index 30fafb2..cf87787 100644
--- a/ppapi/proxy/plugin_resource_tracker.h
+++ b/ppapi/proxy/plugin_resource_tracker.h
@@ -15,7 +15,6 @@
#include "ppapi/c/pp_stdint.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_var.h"
-#include "ppapi/proxy/plugin_var_tracker.h"
#include "ppapi/proxy/ppapi_proxy_export.h"
#include "ppapi/shared_impl/host_resource.h"
#include "ppapi/shared_impl/resource_tracker.h"
@@ -34,13 +33,9 @@ class PluginDispatcher;
class PPAPI_PROXY_EXPORT PluginResourceTracker : public TrackerBase,
public ResourceTracker {
public:
- // Called by tests that want to specify a specific ResourceTracker. This
- // allows them to use a unique one each time and avoids singletons sticking
- // around across tests.
- static void SetInstanceForTest(PluginResourceTracker* tracker);
+ PluginResourceTracker();
+ virtual ~PluginResourceTracker();
- // Returns the global singleton resource tracker for the plugin.
- static PluginResourceTracker* GetInstance();
static TrackerBase* GetTrackerBaseInstance();
// Given a host resource, maps it to an existing plugin resource ID if it
@@ -48,20 +43,9 @@ class PPAPI_PROXY_EXPORT PluginResourceTracker : public TrackerBase,
PP_Resource PluginResourceForHostResource(
const HostResource& resource) const;
- PluginVarTracker& var_tracker() {
- return var_tracker_test_override_ ? *var_tracker_test_override_
- : var_tracker_;
- }
-
- void set_var_tracker_test_override(PluginVarTracker* t) {
- var_tracker_test_override_ = t;
- }
-
// TrackerBase.
virtual FunctionGroupBase* GetFunctionAPI(PP_Instance inst,
InterfaceID id) OVERRIDE;
- virtual VarTracker* GetVarTracker() OVERRIDE;
- virtual ResourceTracker* GetResourceTracker() OVERRIDE;
virtual PP_Module GetModuleForInstance(PP_Instance instance) OVERRIDE;
protected:
@@ -70,24 +54,6 @@ class PPAPI_PROXY_EXPORT PluginResourceTracker : public TrackerBase,
virtual void RemoveResource(Resource* object) OVERRIDE;
private:
- friend struct DefaultSingletonTraits<PluginResourceTracker>;
- friend class PluginResourceTrackerTest;
- friend class PluginProxyTestHarness;
-
- PluginResourceTracker();
- virtual ~PluginResourceTracker();
-
- // Use the var_tracker_test_override_ instead if it's non-NULL.
- //
- // TODO(brettw) this should be somehow separated out from here. I'm thinking
- // of some global object that manages PPAPI globals, including separate var
- // and resource trackers.
- PluginVarTracker var_tracker_;
-
- // Non-owning pointer to a var tracker mock used by tests. NULL when no
- // test implementation is provided.
- PluginVarTracker* var_tracker_test_override_;
-
// Map of host instance/resource pairs to a plugin resource ID.
typedef std::map<HostResource, PP_Resource> HostResourceMap;
HostResourceMap host_resource_map_;
diff --git a/ppapi/proxy/plugin_var_serialization_rules.cc b/ppapi/proxy/plugin_var_serialization_rules.cc
index 49e1fc3..3d9975a 100644
--- a/ppapi/proxy/plugin_var_serialization_rules.cc
+++ b/ppapi/proxy/plugin_var_serialization_rules.cc
@@ -6,15 +6,17 @@
#include "base/logging.h"
#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/plugin_var_tracker.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/var.h"
namespace ppapi {
namespace proxy {
PluginVarSerializationRules::PluginVarSerializationRules()
- : var_tracker_(&PluginResourceTracker::GetInstance()->var_tracker()) {
+ : var_tracker_(PluginGlobals::Get()->plugin_var_tracker()) {
}
PluginVarSerializationRules::~PluginVarSerializationRules() {
diff --git a/ppapi/proxy/ppapi_proxy_test.cc b/ppapi/proxy/ppapi_proxy_test.cc
index 1c7233c..484253b 100644
--- a/ppapi/proxy/ppapi_proxy_test.cc
+++ b/ppapi/proxy/ppapi_proxy_test.cc
@@ -151,9 +151,7 @@ Dispatcher* PluginProxyTestHarness::GetDispatcher() {
void PluginProxyTestHarness::SetUpHarness() {
// These must be first since the dispatcher set-up uses them.
- resource_tracker_.DidCreateInstance(pp_instance());
- PluginResourceTracker::SetInstanceForTest(&resource_tracker_);
- resource_tracker_.set_var_tracker_test_override(&var_tracker_);
+ resource_tracker().DidCreateInstance(pp_instance());
plugin_dispatcher_.reset(new PluginDispatcher(
base::Process::Current().handle(),
@@ -168,9 +166,7 @@ void PluginProxyTestHarness::SetUpHarnessWithChannel(
base::WaitableEvent* shutdown_event,
bool is_client) {
// These must be first since the dispatcher set-up uses them.
- resource_tracker_.DidCreateInstance(pp_instance());
- PluginResourceTracker::SetInstanceForTest(&resource_tracker_);
- resource_tracker_.set_var_tracker_test_override(&var_tracker_);
+ resource_tracker().DidCreateInstance(pp_instance());
plugin_delegate_mock_.Init(ipc_message_loop, shutdown_event);
plugin_dispatcher_.reset(new PluginDispatcher(
@@ -186,8 +182,7 @@ void PluginProxyTestHarness::TearDownHarness() {
plugin_dispatcher_->DidDestroyInstance(pp_instance());
plugin_dispatcher_.reset();
- resource_tracker_.DidDeleteInstance(pp_instance());
- PluginResourceTracker::SetInstanceForTest(NULL);
+ resource_tracker().DidDeleteInstance(pp_instance());
}
base::MessageLoopProxy*
diff --git a/ppapi/proxy/ppapi_proxy_test.h b/ppapi/proxy/ppapi_proxy_test.h
index 03ec57d..cf71a5e 100644
--- a/ppapi/proxy/ppapi_proxy_test.h
+++ b/ppapi/proxy/ppapi_proxy_test.h
@@ -13,6 +13,7 @@
#include "ppapi/c/pp_instance.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/plugin_var_tracker.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -78,8 +79,12 @@ class PluginProxyTestHarness : public ProxyTestHarnessBase {
virtual ~PluginProxyTestHarness();
PluginDispatcher* plugin_dispatcher() { return plugin_dispatcher_.get(); }
- PluginResourceTracker& resource_tracker() { return resource_tracker_; }
- PluginVarTracker& var_tracker() { return var_tracker_; }
+ PluginResourceTracker& resource_tracker() {
+ return *plugin_globals_.plugin_resource_tracker();
+ }
+ PluginVarTracker& var_tracker() {
+ return *plugin_globals_.plugin_var_tracker();
+ }
// ProxyTestHarnessBase implementation.
virtual Dispatcher* GetDispatcher();
@@ -123,8 +128,8 @@ class PluginProxyTestHarness : public ProxyTestHarnessBase {
};
private:
- PluginResourceTracker resource_tracker_;
- PluginVarTracker var_tracker_;
+ PluginGlobals plugin_globals_;
+
scoped_ptr<PluginDispatcher> plugin_dispatcher_;
PluginDelegateMock plugin_delegate_mock_;
};
diff --git a/ppapi/proxy/ppb_audio_proxy.cc b/ppapi/proxy/ppb_audio_proxy.cc
index 453d7b0..f1aedf7 100644
--- a/ppapi/proxy/ppb_audio_proxy.cc
+++ b/ppapi/proxy/ppb_audio_proxy.cc
@@ -16,6 +16,7 @@
#include "ppapi/proxy/plugin_dispatcher.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/shared_impl/audio_impl.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_audio_config_api.h"
#include "ppapi/thunk/enter.h"
@@ -64,11 +65,11 @@ Audio::Audio(const HostResource& audio_id,
: Resource(audio_id),
config_(config_id) {
SetCallback(callback, user_data);
- PluginResourceTracker::GetInstance()->AddRefResource(config_);
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(config_);
}
Audio::~Audio() {
- PluginResourceTracker::GetInstance()->ReleaseResource(config_);
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(config_);
}
PPB_Audio_API* Audio::AsPPB_Audio_API() {
@@ -77,7 +78,7 @@ PPB_Audio_API* Audio::AsPPB_Audio_API() {
PP_Resource Audio::GetCurrentConfig() {
// AddRef for the caller.
- PluginResourceTracker::GetInstance()->AddRefResource(config_);
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(config_);
return config_;
}
diff --git a/ppapi/proxy/ppb_core_proxy.cc b/ppapi/proxy/ppb_core_proxy.cc
index 9173df6..c01eb45 100644
--- a/ppapi/proxy/ppb_core_proxy.cc
+++ b/ppapi/proxy/ppb_core_proxy.cc
@@ -18,6 +18,7 @@
#include "ppapi/proxy/plugin_dispatcher.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/proxy_lock.h"
#include "ppapi/shared_impl/time_conversion.h"
@@ -34,12 +35,12 @@ base::MessageLoopProxy* GetMainThreadMessageLoop() {
void AddRefResource(PP_Resource resource) {
ppapi::ProxyAutoLock lock;
- PluginResourceTracker::GetInstance()->AddRefResource(resource);
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource);
}
void ReleaseResource(PP_Resource resource) {
ppapi::ProxyAutoLock lock;
- PluginResourceTracker::GetInstance()->ReleaseResource(resource);
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource);
}
double GetTime() {
diff --git a/ppapi/proxy/ppb_cursor_control_proxy.cc b/ppapi/proxy/ppb_cursor_control_proxy.cc
index a0b0ee8..960c010 100644
--- a/ppapi/proxy/ppb_cursor_control_proxy.cc
+++ b/ppapi/proxy/ppb_cursor_control_proxy.cc
@@ -9,6 +9,7 @@
#include "ppapi/proxy/plugin_dispatcher.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/thunk.h"
@@ -37,8 +38,8 @@ PP_Bool PPB_CursorControl_Proxy::SetCursor(PP_Instance instance,
// It's legal for the image ID to be null if the type is not custom.
HostResource cursor_image_resource;
if (type == PP_CURSORTYPE_CUSTOM) {
- Resource* cursor_image = PluginResourceTracker::GetInstance()->
- GetResource(custom_image_id);
+ Resource* cursor_image =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(custom_image_id);
if (!cursor_image || cursor_image->pp_instance() != instance)
return PP_FALSE;
cursor_image_resource = cursor_image->host_resource();
diff --git a/ppapi/proxy/ppb_file_chooser_proxy.cc b/ppapi/proxy/ppb_file_chooser_proxy.cc
index 1c7907c..1e55af6 100644
--- a/ppapi/proxy/ppb_file_chooser_proxy.cc
+++ b/ppapi/proxy/ppb_file_chooser_proxy.cc
@@ -17,6 +17,8 @@
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_file_ref_proxy.h"
#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/resource_tracker.h"
#include "ppapi/shared_impl/var.h"
#include "ppapi/thunk/resource_creation_api.h"
#include "ppapi/thunk/thunk.h"
@@ -87,7 +89,7 @@ FileChooser::~FileChooser() {
// Any existing files we haven't transferred ownership to the plugin need
// to be freed.
- PluginResourceTracker* tracker = PluginResourceTracker::GetInstance();
+ ResourceTracker* tracker = PpapiGlobals::Get()->GetResourceTracker();
while (!file_queue_.empty()) {
tracker->ReleaseResource(file_queue_.front());
file_queue_.pop();
diff --git a/ppapi/proxy/ppb_file_ref_proxy.cc b/ppapi/proxy/ppb_file_ref_proxy.cc
index 49a1131..c9824a4 100644
--- a/ppapi/proxy/ppb_file_ref_proxy.cc
+++ b/ppapi/proxy/ppb_file_ref_proxy.cc
@@ -90,7 +90,7 @@ int32_t FileRef::Delete(PP_CompletionCallback callback) {
int32_t FileRef::Rename(PP_Resource new_file_ref,
PP_CompletionCallback callback) {
Resource* new_file_ref_object =
- PluginResourceTracker::GetInstance()->GetResource(new_file_ref);
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(new_file_ref);
if (!new_file_ref_object ||
new_file_ref_object->host_resource().instance() != pp_instance())
return PP_ERROR_BADRESOURCE;
@@ -113,7 +113,7 @@ PPB_FileRef_Proxy::~PPB_FileRef_Proxy() {
PP_Resource PPB_FileRef_Proxy::CreateProxyResource(PP_Resource file_system,
const char* path) {
Resource* file_system_object =
- PluginResourceTracker::GetInstance()->GetResource(file_system);
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(file_system);
if (!file_system_object)
return 0;
diff --git a/ppapi/proxy/ppb_flash_file_proxy.cc b/ppapi/proxy/ppb_flash_file_proxy.cc
index fa636aa..de5a40c 100644
--- a/ppapi/proxy/ppb_flash_file_proxy.cc
+++ b/ppapi/proxy/ppb_flash_file_proxy.cc
@@ -21,9 +21,10 @@
#include "ppapi/c/pp_file_info.h"
#include "ppapi/c/private/ppb_flash_file.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/resource.h"
+#include "ppapi/shared_impl/resource_tracker.h"
namespace ppapi {
namespace proxy {
@@ -631,7 +632,7 @@ int32_t OpenFileRefFile(PP_Resource file_ref_id,
int32_t mode,
PP_FileHandle* file) {
Resource* file_ref =
- PluginResourceTracker::GetInstance()->GetResource(file_ref_id);
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(file_ref_id);
if (!file_ref)
return PP_ERROR_BADRESOURCE;
@@ -651,7 +652,7 @@ int32_t OpenFileRefFile(PP_Resource file_ref_id,
int32_t QueryFileRefFile(PP_Resource file_ref_id,
PP_FileInfo* info) {
Resource* file_ref =
- PluginResourceTracker::GetInstance()->GetResource(file_ref_id);
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(file_ref_id);
if (!file_ref)
return PP_ERROR_BADRESOURCE;
diff --git a/ppapi/proxy/ppb_flash_proxy.cc b/ppapi/proxy/ppb_flash_proxy.cc
index 1faae86..b1d0d22 100644
--- a/ppapi/proxy/ppb_flash_proxy.cc
+++ b/ppapi/proxy/ppb_flash_proxy.cc
@@ -14,11 +14,12 @@
#include "ppapi/c/private/ppb_flash.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/proxy_module.h"
#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/resource.h"
+#include "ppapi/shared_impl/resource_tracker.h"
#include "ppapi/shared_impl/scoped_pp_resource.h"
#include "ppapi/shared_impl/var.h"
#include "ppapi/thunk/enter.h"
@@ -48,8 +49,8 @@ PP_Bool DrawGlyphs(PP_Instance instance,
uint32_t glyph_count,
const uint16_t glyph_indices[],
const PP_Point glyph_advances[]) {
- Resource* image_data = PluginResourceTracker::GetInstance()->GetResource(
- pp_image_data);
+ Resource* image_data =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(pp_image_data);
if (!image_data)
return PP_FALSE;
// The instance parameter isn't strictly necessary but we check that it
diff --git a/ppapi/proxy/ppb_graphics_2d_proxy.cc b/ppapi/proxy/ppb_graphics_2d_proxy.cc
index dcf8d26..7bed679 100644
--- a/ppapi/proxy/ppb_graphics_2d_proxy.cc
+++ b/ppapi/proxy/ppb_graphics_2d_proxy.cc
@@ -87,8 +87,8 @@ PP_Bool Graphics2D::Describe(PP_Size* size, PP_Bool* is_always_opaque) {
void Graphics2D::PaintImageData(PP_Resource image_data,
const PP_Point* top_left,
const PP_Rect* src_rect) {
- Resource* image_object = PluginResourceTracker::GetInstance()->
- GetResource(image_data);
+ Resource* image_object =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(image_data);
if (!image_object || pp_instance() != image_object->pp_instance())
return;
@@ -110,8 +110,8 @@ void Graphics2D::Scroll(const PP_Rect* clip_rect,
}
void Graphics2D::ReplaceContents(PP_Resource image_data) {
- Resource* image_object = PluginResourceTracker::GetInstance()->
- GetResource(image_data);
+ Resource* image_object =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(image_data);
if (!image_object || pp_instance() != image_object->pp_instance())
return;
diff --git a/ppapi/proxy/ppb_instance_proxy.cc b/ppapi/proxy/ppb_instance_proxy.cc
index 0d79df43..f11f396 100644
--- a/ppapi/proxy/ppb_instance_proxy.cc
+++ b/ppapi/proxy/ppb_instance_proxy.cc
@@ -11,9 +11,9 @@
#include "ppapi/c/ppb_mouse_lock.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/url_util_impl.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/thunk.h"
@@ -123,7 +123,8 @@ PPB_Instance_FunctionAPI* PPB_Instance_Proxy::AsPPB_Instance_FunctionAPI() {
PP_Bool PPB_Instance_Proxy::BindGraphics(PP_Instance instance,
PP_Resource device) {
- Resource* object = PluginResourceTracker::GetInstance()->GetResource(device);
+ Resource* object =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(device);
if (!object || object->pp_instance() != instance)
return PP_FALSE;
diff --git a/ppapi/proxy/ppb_testing_proxy.cc b/ppapi/proxy/ppb_testing_proxy.cc
index 836e1cf..470d3da 100644
--- a/ppapi/proxy/ppb_testing_proxy.cc
+++ b/ppapi/proxy/ppb_testing_proxy.cc
@@ -7,9 +7,10 @@
#include "base/message_loop.h"
#include "ppapi/c/dev/ppb_testing_dev.h"
#include "ppapi/proxy/plugin_dispatcher.h"
-#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/resource.h"
+#include "ppapi/shared_impl/resource_tracker.h"
namespace ppapi {
namespace proxy {
@@ -19,12 +20,12 @@ namespace {
PP_Bool ReadImageData(PP_Resource graphics_2d,
PP_Resource image,
const PP_Point* top_left) {
- Resource* image_object = PluginResourceTracker::GetInstance()->
- GetResource(image);
+ Resource* image_object =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(image);
if (!image_object)
return PP_FALSE;
Resource* graphics_2d_object =
- PluginResourceTracker::GetInstance()->GetResource(graphics_2d);
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(graphics_2d);
if (!graphics_2d_object ||
image_object->pp_instance() != graphics_2d_object->pp_instance())
return PP_FALSE;
diff --git a/ppapi/proxy/ppb_url_loader_proxy.cc b/ppapi/proxy/ppb_url_loader_proxy.cc
index 70c01e8..2ad3025 100644
--- a/ppapi/proxy/ppb_url_loader_proxy.cc
+++ b/ppapi/proxy/ppb_url_loader_proxy.cc
@@ -172,7 +172,7 @@ URLLoader::~URLLoader() {
}
if (response_info_)
- PluginResourceTracker::GetInstance()->ReleaseResource(response_info_);
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(response_info_);
}
PPB_URLLoader_API* URLLoader::AsPPB_URLLoader_API() {
@@ -240,7 +240,7 @@ PP_Resource URLLoader::GetResponseInfo() {
}
// The caller expects to get a ref, and we want to keep holding ours.
- PluginResourceTracker::GetInstance()->AddRefResource(response_info_);
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(response_info_);
return response_info_;
}
diff --git a/ppapi/proxy/ppb_var_deprecated_proxy.cc b/ppapi/proxy/ppb_var_deprecated_proxy.cc
index 6475580..892fba1 100644
--- a/ppapi/proxy/ppb_var_deprecated_proxy.cc
+++ b/ppapi/proxy/ppb_var_deprecated_proxy.cc
@@ -15,6 +15,7 @@
#include "ppapi/c/ppb_core.h"
#include "ppapi/proxy/host_dispatcher.h"
#include "ppapi/proxy/plugin_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/plugin_var_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
@@ -41,8 +42,9 @@ PluginDispatcher* CheckExceptionAndGetDispatcher(const PP_Var& object,
if (object.type == PP_VARTYPE_OBJECT) {
// Get the dispatcher for the object.
- PluginDispatcher* dispatcher = PluginResourceTracker::GetInstance()->
- var_tracker().DispatcherForPluginObject(object);
+ PluginDispatcher* dispatcher =
+ PluginGlobals::Get()->plugin_var_tracker()->
+ DispatcherForPluginObject(object);
if (dispatcher)
return dispatcher;
}
@@ -59,11 +61,11 @@ PluginDispatcher* CheckExceptionAndGetDispatcher(const PP_Var& object,
// PPB_Var_Deprecated plugin ---------------------------------------------------
void AddRefVar(PP_Var var) {
- PluginResourceTracker::GetInstance()->var_tracker().AddRefVar(var);
+ PpapiGlobals::Get()->GetVarTracker()->AddRefVar(var);
}
void ReleaseVar(PP_Var var) {
- PluginResourceTracker::GetInstance()->var_tracker().ReleaseVar(var);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(var);
}
PP_Var VarFromUtf8(PP_Module module, const char* data, uint32_t len) {
diff --git a/ppapi/proxy/ppb_var_proxy.cc b/ppapi/proxy/ppb_var_proxy.cc
index 0c7cf5b..4301234 100644
--- a/ppapi/proxy/ppb_var_proxy.cc
+++ b/ppapi/proxy/ppb_var_proxy.cc
@@ -6,10 +6,10 @@
#include "ppapi/c/pp_var.h"
#include "ppapi/c/ppb_var.h"
-#include "ppapi/proxy/plugin_resource_tracker.h"
-#include "ppapi/proxy/plugin_var_tracker.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/proxy_lock.h"
#include "ppapi/shared_impl/var.h"
+#include "ppapi/shared_impl/var_tracker.h"
namespace ppapi {
namespace proxy {
@@ -20,12 +20,12 @@ namespace {
void AddRefVar(PP_Var var) {
ppapi::ProxyAutoLock lock;
- PluginResourceTracker::GetInstance()->var_tracker().AddRefVar(var);
+ PpapiGlobals::Get()->GetVarTracker()->AddRefVar(var);
}
void ReleaseVar(PP_Var var) {
ppapi::ProxyAutoLock lock;
- PluginResourceTracker::GetInstance()->var_tracker().ReleaseVar(var);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(var);
}
PP_Var VarFromUtf8(PP_Module module, const char* data, uint32_t len) {
diff --git a/ppapi/proxy/ppb_video_capture_proxy.cc b/ppapi/proxy/ppb_video_capture_proxy.cc
index 9f40c1f..c771bf5 100644
--- a/ppapi/proxy/ppb_video_capture_proxy.cc
+++ b/ppapi/proxy/ppb_video_capture_proxy.cc
@@ -373,11 +373,11 @@ void PPP_VideoCapture_Proxy::OnMsgOnDeviceInfo(
const PP_VideoCaptureDeviceInfo_Dev& info,
const std::vector<PPPVideoCapture_Buffer>& buffers) {
EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource);
- PluginResourceTracker* tracker = PluginResourceTracker::GetInstance();
- PP_Resource resource = tracker->PluginResourceForHostResource(host_resource);
- if (!resource || !ppp_video_capture_impl_ || enter.failed())
+ if (enter.failed() || !ppp_video_capture_impl_)
return;
+ PluginResourceTracker* tracker =
+ PluginGlobals::Get()->plugin_resource_tracker();
scoped_array<PP_Resource> resources(new PP_Resource[buffers.size()]);
for (size_t i = 0; i < buffers.size(); ++i) {
// We assume that the browser created a new set of resources.
@@ -386,10 +386,12 @@ void PPP_VideoCapture_Proxy::OnMsgOnDeviceInfo(
buffers[i].handle,
buffers[i].size);
}
- static_cast<VideoCapture*>(enter.object())->SetBufferCount(buffers.size());
+
+ VideoCapture* capture = static_cast<VideoCapture*>(enter.object());
+ capture->SetBufferCount(buffers.size());
ppp_video_capture_impl_->OnDeviceInfo(
host_resource.instance(),
- resource,
+ capture->pp_resource(),
&info,
buffers.size(),
resources.get());
@@ -400,40 +402,38 @@ void PPP_VideoCapture_Proxy::OnMsgOnDeviceInfo(
void PPP_VideoCapture_Proxy::OnMsgOnStatus(const HostResource& host_resource,
uint32_t status) {
EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource);
- PluginResourceTracker* tracker = PluginResourceTracker::GetInstance();
- PP_Resource resource = tracker->PluginResourceForHostResource(host_resource);
- if (!resource || !ppp_video_capture_impl_ || enter.failed())
+ if (enter.failed() || !ppp_video_capture_impl_)
return;
- if (!static_cast<VideoCapture*>(enter.object())->OnStatus(status))
+ VideoCapture* capture = static_cast<VideoCapture*>(enter.object());
+ if (!capture->OnStatus(status))
return;
ppp_video_capture_impl_->OnStatus(
- host_resource.instance(), resource, status);
+ host_resource.instance(), capture->pp_resource(), status);
}
void PPP_VideoCapture_Proxy::OnMsgOnError(const HostResource& host_resource,
uint32_t error_code) {
EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource);
- PluginResourceTracker* tracker = PluginResourceTracker::GetInstance();
- PP_Resource resource = tracker->PluginResourceForHostResource(host_resource);
- if (!resource || !ppp_video_capture_impl_ || enter.failed())
+ if (enter.failed() || !ppp_video_capture_impl_)
return;
- static_cast<VideoCapture*>(enter.object())->set_status(
- PP_VIDEO_CAPTURE_STATUS_STOPPED);
+
+ VideoCapture* capture = static_cast<VideoCapture*>(enter.object());
+ capture->set_status(PP_VIDEO_CAPTURE_STATUS_STOPPED);
ppp_video_capture_impl_->OnError(
- host_resource.instance(), resource, error_code);
+ host_resource.instance(), capture->pp_resource(), error_code);
}
void PPP_VideoCapture_Proxy::OnMsgOnBufferReady(
const HostResource& host_resource, uint32_t buffer) {
EnterPluginFromHostResource<PPB_VideoCapture_API> enter(host_resource);
- PluginResourceTracker* tracker = PluginResourceTracker::GetInstance();
- PP_Resource resource = tracker->PluginResourceForHostResource(host_resource);
- if (!resource || !ppp_video_capture_impl_ || enter.failed())
+ if (enter.failed() || !ppp_video_capture_impl_)
return;
- static_cast<VideoCapture*>(enter.object())->SetBufferInUse(buffer);
+
+ VideoCapture* capture = static_cast<VideoCapture*>(enter.object());
+ capture->SetBufferInUse(buffer);
ppp_video_capture_impl_->OnBufferReady(
- host_resource.instance(), resource, buffer);
+ host_resource.instance(), capture->pp_resource(), buffer);
}
} // namespace proxy
diff --git a/ppapi/proxy/ppp_instance_private_proxy_unittest.cc b/ppapi/proxy/ppp_instance_private_proxy_unittest.cc
index a192154..ea57ec1 100644
--- a/ppapi/proxy/ppp_instance_private_proxy_unittest.cc
+++ b/ppapi/proxy/ppp_instance_private_proxy_unittest.cc
@@ -156,7 +156,7 @@ TEST_F(PPP_Instance_Private_ProxyTest, PPPInstancePrivate) {
// Now instance_obj is valid and should have a ref-count of 1.
PluginVarTracker& plugin_var_tracker =
- PluginResourceTracker::GetInstance()->var_tracker();
+ *PluginGlobals::Get()->plugin_var_tracker();
// Check the plugin-side reference count.
EXPECT_EQ(1, plugin_var_tracker.GetRefCountForObject(instance_obj));
// Check the host-side var and reference count.
diff --git a/ppapi/proxy/ppp_instance_proxy.cc b/ppapi/proxy/ppp_instance_proxy.cc
index c3e7395..9463f28 100644
--- a/ppapi/proxy/ppp_instance_proxy.cc
+++ b/ppapi/proxy/ppp_instance_proxy.cc
@@ -15,6 +15,7 @@
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_url_loader_proxy.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
namespace ppapi {
namespace proxy {
@@ -175,7 +176,7 @@ void PPP_Instance_Proxy::OnMsgDidCreate(
PluginDispatcher* plugin_dispatcher =
static_cast<PluginDispatcher*>(dispatcher());
plugin_dispatcher->DidCreateInstance(instance);
- ppapi::TrackerBase::Get()->GetResourceTracker()->DidCreateInstance(instance);
+ PpapiGlobals::Get()->GetResourceTracker()->DidCreateInstance(instance);
// Make sure the arrays always have at least one element so we can take the
// address below.
@@ -196,7 +197,7 @@ void PPP_Instance_Proxy::OnMsgDidCreate(
void PPP_Instance_Proxy::OnMsgDidDestroy(PP_Instance instance) {
combined_interface_->DidDestroy(instance);
- ppapi::TrackerBase::Get()->GetResourceTracker()->DidDeleteInstance(instance);
+ PpapiGlobals::Get()->GetResourceTracker()->DidDeleteInstance(instance);
static_cast<PluginDispatcher*>(dispatcher())->DidDestroyInstance(instance);
}
@@ -235,7 +236,7 @@ void PPP_Instance_Proxy::OnMsgHandleDocumentLoad(PP_Instance instance,
// representing all plugin references).
// Once all references at the plugin side are released, the renderer side will
// be notified and release the reference added in HandleDocumentLoad() above.
- PluginResourceTracker::GetInstance()->ReleaseResource(plugin_loader);
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(plugin_loader);
}
} // namespace proxy
diff --git a/ppapi/proxy/ppp_messaging_proxy.cc b/ppapi/proxy/ppp_messaging_proxy.cc
index 390794a..60cd8c4 100644
--- a/ppapi/proxy/ppp_messaging_proxy.cc
+++ b/ppapi/proxy/ppp_messaging_proxy.cc
@@ -12,6 +12,8 @@
#include "ppapi/proxy/plugin_var_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/serialized_var.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/var_tracker.h"
namespace ppapi {
namespace proxy {
@@ -82,7 +84,7 @@ void PPP_Messaging_Proxy::OnMsgHandleMessage(
PP_Var received_var(message_data.Get(dispatcher()));
// SerializedVarReceiveInput will decrement the reference count, but we want
// to give the recipient a reference.
- PluginResourceTracker::GetInstance()->var_tracker().AddRefVar(received_var);
+ PpapiGlobals::Get()->GetVarTracker()->AddRefVar(received_var);
ppp_messaging_impl_->HandleMessage(instance, received_var);
}
diff --git a/ppapi/proxy/ppp_video_decoder_proxy.cc b/ppapi/proxy/ppp_video_decoder_proxy.cc
index c115278..3852806 100644
--- a/ppapi/proxy/ppp_video_decoder_proxy.cc
+++ b/ppapi/proxy/ppp_video_decoder_proxy.cc
@@ -5,6 +5,7 @@
#include "ppapi/proxy/ppp_video_decoder_proxy.h"
#include "ppapi/proxy/host_dispatcher.h"
+#include "ppapi/proxy/plugin_globals.h"
#include "ppapi/proxy/plugin_resource_tracker.h"
#include "ppapi/proxy/ppapi_messages.h"
#include "ppapi/proxy/ppb_video_decoder_proxy.h"
@@ -131,7 +132,7 @@ bool PPP_VideoDecoder_Proxy::OnMessageReceived(const IPC::Message& msg) {
void PPP_VideoDecoder_Proxy::OnMsgProvidePictureBuffers(
const HostResource& decoder, uint32_t req_num_of_bufs,
const PP_Size& dimensions) {
- PP_Resource plugin_decoder = PluginResourceTracker::GetInstance()->
+ PP_Resource plugin_decoder = PluginGlobals::Get()->plugin_resource_tracker()->
PluginResourceForHostResource(decoder);
ppp_video_decoder_impl_->ProvidePictureBuffers(
decoder.instance(), plugin_decoder, req_num_of_bufs, &dimensions);
@@ -139,7 +140,7 @@ void PPP_VideoDecoder_Proxy::OnMsgProvidePictureBuffers(
void PPP_VideoDecoder_Proxy::OnMsgDismissPictureBuffer(
const HostResource& decoder, int32_t picture_id) {
- PP_Resource plugin_decoder = PluginResourceTracker::GetInstance()->
+ PP_Resource plugin_decoder = PluginGlobals::Get()->plugin_resource_tracker()->
PluginResourceForHostResource(decoder);
ppp_video_decoder_impl_->DismissPictureBuffer(
decoder.instance(), plugin_decoder, picture_id);
@@ -147,7 +148,7 @@ void PPP_VideoDecoder_Proxy::OnMsgDismissPictureBuffer(
void PPP_VideoDecoder_Proxy::OnMsgPictureReady(
const HostResource& decoder, const PP_Picture_Dev& picture) {
- PP_Resource plugin_decoder = PluginResourceTracker::GetInstance()->
+ PP_Resource plugin_decoder = PluginGlobals::Get()->plugin_resource_tracker()->
PluginResourceForHostResource(decoder);
ppp_video_decoder_impl_->PictureReady(
decoder.instance(), plugin_decoder, &picture);
@@ -155,7 +156,7 @@ void PPP_VideoDecoder_Proxy::OnMsgPictureReady(
void PPP_VideoDecoder_Proxy::OnMsgNotifyEndOfStream(
const HostResource& decoder) {
- PP_Resource plugin_decoder = PluginResourceTracker::GetInstance()->
+ PP_Resource plugin_decoder = PluginGlobals::Get()->plugin_resource_tracker()->
PluginResourceForHostResource(decoder);
ppp_video_decoder_impl_->EndOfStream(decoder.instance(),
plugin_decoder);
@@ -163,7 +164,7 @@ void PPP_VideoDecoder_Proxy::OnMsgNotifyEndOfStream(
void PPP_VideoDecoder_Proxy::OnMsgNotifyError(
const HostResource& decoder, PP_VideoDecodeError_Dev error) {
- PP_Resource plugin_decoder = PluginResourceTracker::GetInstance()->
+ PP_Resource plugin_decoder = PluginGlobals::Get()->plugin_resource_tracker()->
PluginResourceForHostResource(decoder);
ppp_video_decoder_impl_->NotifyError(
decoder.instance(), plugin_decoder, error);
diff --git a/ppapi/shared_impl/ppapi_globals.cc b/ppapi/shared_impl/ppapi_globals.cc
new file mode 100644
index 0000000..9b5e9a8
--- /dev/null
+++ b/ppapi/shared_impl/ppapi_globals.cc
@@ -0,0 +1,23 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/shared_impl/ppapi_globals.h"
+
+#include "base/logging.h"
+
+namespace ppapi {
+
+PpapiGlobals* PpapiGlobals::ppapi_globals_ = NULL;
+
+PpapiGlobals::PpapiGlobals() {
+ DCHECK(!ppapi_globals_);
+ ppapi_globals_ = this;
+}
+
+PpapiGlobals::~PpapiGlobals() {
+ DCHECK(ppapi_globals_ == this);
+ ppapi_globals_ = NULL;
+}
+
+} // namespace ppapi
diff --git a/ppapi/shared_impl/ppapi_globals.h b/ppapi/shared_impl/ppapi_globals.h
new file mode 100644
index 0000000..d0936ee
--- /dev/null
+++ b/ppapi/shared_impl/ppapi_globals.h
@@ -0,0 +1,36 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PPAPI_SHARED_IMPL_PPAPI_GLOBALS_H_
+#define PPAPI_SHARED_IMPL_PPAPI_GLOBALS_H_
+
+#include "base/basictypes.h"
+#include "ppapi/shared_impl/ppapi_shared_export.h"
+
+namespace ppapi {
+
+class ResourceTracker;
+class VarTracker;
+
+// Abstract base class
+class PPAPI_SHARED_EXPORT PpapiGlobals {
+ public:
+ PpapiGlobals();
+ virtual ~PpapiGlobals();
+
+ // Getter for the global singleton.
+ inline static PpapiGlobals* Get() { return ppapi_globals_; }
+
+ virtual ResourceTracker* GetResourceTracker() = 0;
+ virtual VarTracker* GetVarTracker() = 0;
+
+ private:
+ static PpapiGlobals* ppapi_globals_;
+
+ DISALLOW_COPY_AND_ASSIGN(PpapiGlobals);
+};
+
+} // namespace ppapi
+
+#endif // PPAPI_SHARED_IMPL_PPAPI_GLOBALS_H_
diff --git a/ppapi/shared_impl/resource.cc b/ppapi/shared_impl/resource.cc
index 11ac86a..4e1f2a8 100644
--- a/ppapi/shared_impl/resource.cc
+++ b/ppapi/shared_impl/resource.cc
@@ -6,7 +6,7 @@
#include "base/logging.h"
#include "ppapi/shared_impl/resource_tracker.h"
-#include "ppapi/shared_impl/tracker_base.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
namespace ppapi {
@@ -20,21 +20,21 @@ Resource::Resource(PP_Instance instance) {
// the host resource, so we need to fill that first even though we don't
// have a resource ID yet, then fill the resource in later.
host_resource_ = HostResource::MakeInstanceOnly(instance);
- pp_resource_ = TrackerBase::Get()->GetResourceTracker()->AddResource(this);
+ pp_resource_ = PpapiGlobals::Get()->GetResourceTracker()->AddResource(this);
host_resource_.SetHostResource(instance, pp_resource_);
}
Resource::Resource(const HostResource& host_resource)
: host_resource_(host_resource) {
- pp_resource_ = TrackerBase::Get()->GetResourceTracker()->AddResource(this);
+ pp_resource_ = PpapiGlobals::Get()->GetResourceTracker()->AddResource(this);
}
Resource::~Resource() {
- TrackerBase::Get()->GetResourceTracker()->RemoveResource(this);
+ PpapiGlobals::Get()->GetResourceTracker()->RemoveResource(this);
}
PP_Resource Resource::GetReference() {
- TrackerBase::Get()->GetResourceTracker()->AddRefResource(pp_resource());
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(pp_resource());
return pp_resource();
}
diff --git a/ppapi/shared_impl/resource_tracker_unittest.cc b/ppapi/shared_impl/resource_tracker_unittest.cc
index 371f6e77..2e22d6a 100644
--- a/ppapi/shared_impl/resource_tracker_unittest.cc
+++ b/ppapi/shared_impl/resource_tracker_unittest.cc
@@ -7,6 +7,7 @@
#include "base/compiler_specific.h"
#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/resource_tracker.h"
+#include "ppapi/shared_impl/test_globals.h"
#include "ppapi/shared_impl/tracker_base.h"
namespace ppapi {
@@ -68,20 +69,14 @@ class ResourceTrackerTest : public testing::Test, public TrackerBase {
ppapi::proxy::InterfaceID id) OVERRIDE {
return NULL;
}
- virtual VarTracker* GetVarTracker() OVERRIDE {
- return NULL;
- }
- virtual ResourceTracker* GetResourceTracker() OVERRIDE {
- return &resource_tracker_;
- }
virtual PP_Module GetModuleForInstance(PP_Instance /* instance */) OVERRIDE {
return 0;
}
- ResourceTracker& resource_tracker() { return resource_tracker_; }
+ ResourceTracker& resource_tracker() { return *globals_.GetResourceTracker(); }
private:
- ResourceTracker resource_tracker_;
+ TestGlobals globals_;
};
// Test that LastPluginRefWasDeleted is called when the last plugin ref was
diff --git a/ppapi/shared_impl/scoped_pp_resource.cc b/ppapi/shared_impl/scoped_pp_resource.cc
index d5a9748..8399208 100644
--- a/ppapi/shared_impl/scoped_pp_resource.cc
+++ b/ppapi/shared_impl/scoped_pp_resource.cc
@@ -4,9 +4,9 @@
#include "ppapi/shared_impl/scoped_pp_resource.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/resource_tracker.h"
-#include "ppapi/shared_impl/tracker_base.h"
namespace ppapi {
@@ -64,12 +64,12 @@ PP_Resource ScopedPPResource::Release() {
void ScopedPPResource::CallAddRef() {
if (id_)
- TrackerBase::Get()->GetResourceTracker()->AddRefResource(id_);
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(id_);
}
void ScopedPPResource::CallRelease() {
if (id_)
- TrackerBase::Get()->GetResourceTracker()->ReleaseResource(id_);
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(id_);
}
} // namespace ppapi
diff --git a/ppapi/shared_impl/test_globals.cc b/ppapi/shared_impl/test_globals.cc
new file mode 100644
index 0000000..17ac224
--- /dev/null
+++ b/ppapi/shared_impl/test_globals.cc
@@ -0,0 +1,23 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/shared_impl/test_globals.h"
+
+namespace ppapi {
+
+TestGlobals::TestGlobals() : ppapi::PpapiGlobals() {
+}
+
+TestGlobals::~TestGlobals() {
+}
+
+ResourceTracker* TestGlobals::GetResourceTracker() {
+ return &resource_tracker_;
+}
+
+VarTracker* TestGlobals::GetVarTracker() {
+ return &var_tracker_;
+}
+
+} // namespace ppapi
diff --git a/ppapi/shared_impl/test_globals.h b/ppapi/shared_impl/test_globals.h
new file mode 100644
index 0000000..c2062b7
--- /dev/null
+++ b/ppapi/shared_impl/test_globals.h
@@ -0,0 +1,35 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PPAPI_SHARED_IMPL_TEST_GLOBALS_H_
+#define PPAPI_SHARED_IMPL_TEST_GLOBALS_H_
+
+#include "base/compiler_specific.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/resource_tracker.h"
+#include "ppapi/shared_impl/var_tracker.h"
+
+namespace ppapi {
+
+// Implementation of PpapiGlobals for tests that don't need either the host- or
+// plugin-specific implementations.
+class TestGlobals : public PpapiGlobals {
+ public:
+ TestGlobals();
+ virtual ~TestGlobals();
+
+ // PpapiGlobals implementation.
+ virtual ResourceTracker* GetResourceTracker() OVERRIDE;
+ virtual VarTracker* GetVarTracker() OVERRIDE;
+
+ private:
+ ResourceTracker resource_tracker_;
+ VarTracker var_tracker_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestGlobals);
+};
+
+} // namespace ppapi
+
+#endif // PPAPI_SHARED_IMPL_TEST_GLOBALS_H_
diff --git a/ppapi/shared_impl/tracker_base.h b/ppapi/shared_impl/tracker_base.h
index 9ff19d4..940cef4 100644
--- a/ppapi/shared_impl/tracker_base.h
+++ b/ppapi/shared_impl/tracker_base.h
@@ -44,9 +44,6 @@ class PPAPI_SHARED_EXPORT TrackerBase {
virtual FunctionGroupBase* GetFunctionAPI(PP_Instance inst,
proxy::InterfaceID id) = 0;
- virtual VarTracker* GetVarTracker() = 0;
- virtual ResourceTracker* GetResourceTracker() = 0;
-
// Returns the PP_Module associated with the given PP_Instance, or 0 on
// failure.
virtual PP_Module GetModuleForInstance(PP_Instance instance) = 0;
diff --git a/ppapi/shared_impl/url_util_impl.cc b/ppapi/shared_impl/url_util_impl.cc
index 5bced6c..d295fd7 100644
--- a/ppapi/shared_impl/url_util_impl.cc
+++ b/ppapi/shared_impl/url_util_impl.cc
@@ -5,6 +5,7 @@
#include "ppapi/shared_impl/url_util_impl.h"
#include "googleurl/src/gurl.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/tracker_base.h"
#include "ppapi/shared_impl/var.h"
#include "ppapi/shared_impl/var_tracker.h"
@@ -106,7 +107,7 @@ PP_Var URLUtilImpl::ConvertComponentsAndReturnURL(
return url;
PP_Var result = Canonicalize(url, components);
- TrackerBase::Get()->GetVarTracker()->ReleaseVar(url);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(url);
return result;
}
diff --git a/ppapi/shared_impl/var.cc b/ppapi/shared_impl/var.cc
index 165b8ff..edf339a 100644
--- a/ppapi/shared_impl/var.cc
+++ b/ppapi/shared_impl/var.cc
@@ -10,7 +10,7 @@
#include "base/string_number_conversions.h"
#include "base/string_util.h"
#include "ppapi/c/pp_var.h"
-#include "ppapi/shared_impl/tracker_base.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/var_tracker.h"
namespace ppapi {
@@ -78,7 +78,7 @@ int32 Var::GetExistingVarID() const {
}
int32 Var::GetOrCreateVarID() {
- VarTracker* tracker = TrackerBase::Get()->GetVarTracker();
+ VarTracker* tracker = PpapiGlobals::Get()->GetVarTracker();
if (var_id_) {
if (!tracker->AddRefVar(var_id_))
return 0;
@@ -148,7 +148,7 @@ StringVar* StringVar::FromPPVar(PP_Var var) {
if (var.type != PP_VARTYPE_STRING)
return NULL;
scoped_refptr<Var> var_object(
- TrackerBase::Get()->GetVarTracker()->GetVar(var));
+ PpapiGlobals::Get()->GetVarTracker()->GetVar(var));
if (!var_object)
return NULL;
return var_object->AsStringVar();
diff --git a/ppapi/shared_impl/video_decoder_impl.cc b/ppapi/shared_impl/video_decoder_impl.cc
index 71921f92..0b6d4e5 100644
--- a/ppapi/shared_impl/video_decoder_impl.cc
+++ b/ppapi/shared_impl/video_decoder_impl.cc
@@ -32,14 +32,14 @@ void VideoDecoderImpl::InitCommon(
DCHECK(graphics_context);
DCHECK(!gles2_impl_ && !graphics_context_);
gles2_impl_ = gles2_impl;
- TrackerBase::Get()->GetResourceTracker()->AddRefResource(graphics_context);
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(graphics_context);
graphics_context_ = graphics_context;
}
void VideoDecoderImpl::Destroy() {
graphics_context_ = 0;
gles2_impl_ = NULL;
- TrackerBase::Get()->GetResourceTracker()->ReleaseResource(graphics_context_);
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(graphics_context_);
}
bool VideoDecoderImpl::SetFlushCallback(PP_CompletionCallback callback) {
diff --git a/ppapi/thunk/enter.h b/ppapi/thunk/enter.h
index 34fb706..faa556d 100644
--- a/ppapi/thunk/enter.h
+++ b/ppapi/thunk/enter.h
@@ -9,10 +9,11 @@
#include "ppapi/c/pp_resource.h"
#include "ppapi/proxy/interface_id.h"
#include "ppapi/shared_impl/function_group_base.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/proxy_lock.h"
#include "ppapi/shared_impl/resource.h"
-#include "ppapi/shared_impl/tracker_base.h"
#include "ppapi/shared_impl/resource_tracker.h"
+#include "ppapi/shared_impl/tracker_base.h"
#include "ppapi/thunk/ppapi_thunk_export.h"
#include "ppapi/thunk/ppb_instance_api.h"
#include "ppapi/thunk/resource_creation_api.h"
@@ -116,7 +117,7 @@ class EnterFunctionGivenResource : public EnterFunction<FunctionsT> {
private:
static PP_Instance GetInstanceForResource(PP_Resource resource) {
Resource* object =
- TrackerBase::Get()->GetResourceTracker()->GetResource(resource);
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(resource);
return object ? object->pp_instance() : 0;
}
};
@@ -128,7 +129,8 @@ class EnterResource : subtle::LockOnEntry<lock_on_entry> {
public:
EnterResource(PP_Resource resource, bool report_error)
: object_(NULL) {
- resource_ = TrackerBase::Get()->GetResourceTracker()->GetResource(resource);
+ resource_ =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(resource);
if (resource_)
object_ = resource_->GetAs<ResourceT>();
// TODO(brettw) check error and if report_error is set, do something.
diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi
index a5f5973..80252e6 100644
--- a/webkit/glue/webkit_glue.gypi
+++ b/webkit/glue/webkit_glue.gypi
@@ -204,6 +204,8 @@
'../plugins/ppapi/file_type_conversions.cc',
'../plugins/ppapi/file_type_conversions.h',
'../plugins/ppapi/fullscreen_container.h',
+ '../plugins/ppapi/host_globals.cc',
+ '../plugins/ppapi/host_globals.h',
'../plugins/ppapi/message_channel.cc',
'../plugins/ppapi/message_channel.h',
'../plugins/ppapi/npapi_glue.cc',
diff --git a/webkit/plugins/ppapi/callbacks_unittest.cc b/webkit/plugins/ppapi/callbacks_unittest.cc
index 30e534b..b11c725 100644
--- a/webkit/plugins/ppapi/callbacks_unittest.cc
+++ b/webkit/plugins/ppapi/callbacks_unittest.cc
@@ -9,6 +9,7 @@
#include "ppapi/c/pp_completion_callback.h"
#include "ppapi/c/pp_errors.h"
#include "webkit/plugins/ppapi/callbacks.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/mock_resource.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
@@ -184,7 +185,8 @@ class CallbackResourceTest : public PpapiUnittest {
// Test that callbacks get aborted on the last resource unref.
TEST_F(CallbackResourceTest, AbortOnNoRef) {
- ResourceTracker* resource_tracker = ResourceTracker::Get();
+ ResourceTracker* resource_tracker =
+ HostGlobals::Get()->host_resource_tracker();
// Test several things: Unref-ing a resource (to zero refs) with callbacks
// which (1) have been run, (2) have been aborted, (3) haven't been completed.
@@ -223,7 +225,8 @@ TEST_F(CallbackResourceTest, AbortOnNoRef) {
// Test that "resurrecting" a resource (getting a new ID for a |Resource|)
// doesn't resurrect callbacks.
TEST_F(CallbackResourceTest, Resurrection) {
- ResourceTracker* resource_tracker = ResourceTracker::Get();
+ ResourceTracker* resource_tracker =
+ HostGlobals::Get()->host_resource_tracker();
scoped_refptr<CallbackMockResource> resource(
new CallbackMockResource(instance()->pp_instance()));
diff --git a/webkit/plugins/ppapi/host_globals.cc b/webkit/plugins/ppapi/host_globals.cc
new file mode 100644
index 0000000..3a3626f
--- /dev/null
+++ b/webkit/plugins/ppapi/host_globals.cc
@@ -0,0 +1,31 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "webkit/plugins/ppapi/host_globals.h"
+
+namespace webkit {
+namespace ppapi {
+
+HostGlobals* HostGlobals::host_globals_ = NULL;
+
+HostGlobals::HostGlobals() : ::ppapi::PpapiGlobals() {
+ DCHECK(!host_globals_);
+ host_globals_ = this;
+}
+
+HostGlobals::~HostGlobals() {
+ DCHECK(host_globals_ == this);
+ host_globals_ = NULL;
+}
+
+::ppapi::ResourceTracker* HostGlobals::GetResourceTracker() {
+ return &host_resource_tracker_;
+}
+
+::ppapi::VarTracker* HostGlobals::GetVarTracker() {
+ return &host_var_tracker_;
+}
+
+} // namespace ppapi
+} // namespace webkit
diff --git a/webkit/plugins/ppapi/host_globals.h b/webkit/plugins/ppapi/host_globals.h
new file mode 100644
index 0000000..69b18d0
--- /dev/null
+++ b/webkit/plugins/ppapi/host_globals.h
@@ -0,0 +1,44 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef WEBKIT_PLUGINS_PPAPI_HOST_GLOBALS_H_
+#define WEBKIT_PLUGINS_PPAPI_HOST_GLOBALS_H_
+
+#include "base/compiler_specific.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/var_tracker.h"
+#include "webkit/plugins/ppapi/resource_tracker.h"
+
+namespace webkit {
+namespace ppapi {
+
+class HostGlobals : public ::ppapi::PpapiGlobals {
+ public:
+ HostGlobals();
+ virtual ~HostGlobals();
+
+ // Getter for the global singleton. Generally, you should use
+ // PpapiGlobals::Get() when possible. Use this only when you need some
+ // host-specific functionality.
+ inline static HostGlobals* Get() { return host_globals_; }
+
+ // PpapiGlobals implementation.
+ virtual ::ppapi::ResourceTracker* GetResourceTracker() OVERRIDE;
+ virtual ::ppapi::VarTracker* GetVarTracker() OVERRIDE;
+
+ ResourceTracker* host_resource_tracker() { return &host_resource_tracker_; }
+
+ private:
+ static HostGlobals* host_globals_;
+
+ ResourceTracker host_resource_tracker_;
+ ::ppapi::VarTracker host_var_tracker_;
+
+ DISALLOW_COPY_AND_ASSIGN(HostGlobals);
+};
+
+} // namespace ppapi
+} // namespace webkit
+
+#endif // WEBKIT_PLUGINS_PPAPI_HOST_GLOBALS_H_
diff --git a/webkit/plugins/ppapi/npapi_glue.cc b/webkit/plugins/ppapi/npapi_glue.cc
index cdb49d5..dceb25b 100644
--- a/webkit/plugins/ppapi/npapi_glue.cc
+++ b/webkit/plugins/ppapi/npapi_glue.cc
@@ -7,6 +7,7 @@
#include "base/logging.h"
#include "base/memory/ref_counted.h"
#include "base/string_util.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/npobject_var.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/plugin_object.h"
@@ -17,6 +18,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
using ppapi::NPObjectVar;
+using ppapi::PpapiGlobals;
using ppapi::StringVar;
using ppapi::Var;
using WebKit::WebBindings;
@@ -132,8 +134,8 @@ PP_Var NPIdentifierToPPVar(PP_Module module, NPIdentifier id) {
PP_Var NPObjectToPPVar(PluginInstance* instance, NPObject* object) {
DCHECK(object);
scoped_refptr<NPObjectVar> object_var(
- ResourceTracker::Get()->NPObjectVarForNPObject(instance->pp_instance(),
- object));
+ HostGlobals::Get()->host_resource_tracker()->NPObjectVarForNPObject(
+ instance->pp_instance(), object));
if (!object_var) { // No object for this module yet, make a new one.
object_var = new NPObjectVar(instance->module()->pp_module(),
instance->pp_instance(), object);
@@ -159,7 +161,7 @@ PPResultAndExceptionToNPResult::~PPResultAndExceptionToNPResult() {
// been lost.
DCHECK(checked_exception_);
- ResourceTracker::Get()->GetVarTracker()->ReleaseVar(exception_);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(exception_);
}
// Call this with the return value of the PPAPI function. It will convert
@@ -184,7 +186,7 @@ bool PPResultAndExceptionToNPResult::SetResult(PP_Var result) {
// No matter what happened, we need to release the reference to the
// value passed in. On success, a reference to this value will be in
// the np_result_.
- ResourceTracker::Get()->GetVarTracker()->ReleaseVar(result);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(result);
return success_;
}
@@ -236,7 +238,7 @@ PPVarArrayFromNPVariantArray::PPVarArrayFromNPVariantArray(
}
PPVarArrayFromNPVariantArray::~PPVarArrayFromNPVariantArray() {
- ::ppapi::VarTracker* var_tracker = ResourceTracker::Get()->GetVarTracker();
+ ::ppapi::VarTracker* var_tracker = PpapiGlobals::Get()->GetVarTracker();
for (size_t i = 0; i < size_; i++)
var_tracker->ReleaseVar(array_[i]);
}
@@ -248,7 +250,7 @@ PPVarFromNPObject::PPVarFromNPObject(PluginInstance* instance, NPObject* object)
}
PPVarFromNPObject::~PPVarFromNPObject() {
- ResourceTracker::Get()->GetVarTracker()->ReleaseVar(var_);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(var_);
}
// NPObjectAccessorWithIdentifier ----------------------------------------------
@@ -268,7 +270,7 @@ NPObjectAccessorWithIdentifier::NPObjectAccessorWithIdentifier(
}
NPObjectAccessorWithIdentifier::~NPObjectAccessorWithIdentifier() {
- ResourceTracker::Get()->GetVarTracker()->ReleaseVar(identifier_);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(identifier_);
}
// TryCatch --------------------------------------------------------------------
diff --git a/webkit/plugins/ppapi/npobject_var.cc b/webkit/plugins/ppapi/npobject_var.cc
index e430dd2..f87bea4 100644
--- a/webkit/plugins/ppapi/npobject_var.cc
+++ b/webkit/plugins/ppapi/npobject_var.cc
@@ -7,8 +7,10 @@
#include "base/logging.h"
#include "ppapi/c/pp_var.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/resource_tracker.h"
+using webkit::ppapi::HostGlobals;
using WebKit::WebBindings;
namespace ppapi {
@@ -22,12 +24,12 @@ NPObjectVar::NPObjectVar(PP_Module module,
pp_instance_(instance),
np_object_(np_object) {
WebBindings::retainObject(np_object_);
- webkit::ppapi::ResourceTracker::Get()->AddNPObjectVar(this);
+ HostGlobals::Get()->host_resource_tracker()->AddNPObjectVar(this);
}
NPObjectVar::~NPObjectVar() {
if (pp_instance())
- webkit::ppapi::ResourceTracker::Get()->RemoveNPObjectVar(this);
+ HostGlobals::Get()->host_resource_tracker()->RemoveNPObjectVar(this);
WebBindings::releaseObject(np_object_);
}
@@ -60,7 +62,7 @@ scoped_refptr<NPObjectVar> NPObjectVar::FromPPVar(PP_Var var) {
if (var.type != PP_VARTYPE_OBJECT)
return scoped_refptr<NPObjectVar>(NULL);
scoped_refptr<Var> var_object(
- webkit::ppapi::ResourceTracker::Get()->GetVarTracker()->GetVar(var));
+ PpapiGlobals::Get()->GetVarTracker()->GetVar(var));
if (!var_object)
return scoped_refptr<NPObjectVar>();
return scoped_refptr<NPObjectVar>(var_object->AsNPObjectVar());
diff --git a/webkit/plugins/ppapi/plugin_module.cc b/webkit/plugins/ppapi/plugin_module.cc
index cc4350a..48c747d 100644
--- a/webkit/plugins/ppapi/plugin_module.cc
+++ b/webkit/plugins/ppapi/plugin_module.cc
@@ -89,6 +89,7 @@
#include "webkit/plugins/plugin_switches.h"
#include "webkit/plugins/ppapi/callbacks.h"
#include "webkit/plugins/ppapi/common.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/ppapi_interface_factory.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
#include "webkit/plugins/ppapi/ppb_directory_reader_impl.h"
@@ -113,6 +114,7 @@
#include "webkit/plugins/ppapi/resource_tracker.h"
#include "webkit/plugins/ppapi/webkit_forwarding_impl.h"
+using ppapi::PpapiGlobals;
using ppapi::TimeTicksToPPTimeTicks;
using ppapi::TimeToPPTime;
using ppapi::thunk::EnterResource;
@@ -123,6 +125,14 @@ namespace ppapi {
namespace {
+// Global tracking info for PPAPI plugins. This is lazily created before the
+// first plugin is allocated, and leaked on shutdown.
+//
+// Note that we don't want a Singleton here since destroying this object will
+// try to free some stuff that requires WebKit, and Singletons are destroyed
+// after WebKit.
+webkit::ppapi::HostGlobals* host_globals = NULL;
+
// Maintains all currently loaded plugin libs for validating PP_Module
// identifiers.
typedef std::set<PluginModule*> PluginModuleSet;
@@ -141,11 +151,11 @@ base::MessageLoopProxy* GetMainThreadMessageLoop() {
// PPB_Core --------------------------------------------------------------------
void AddRefResource(PP_Resource resource) {
- ResourceTracker::Get()->AddRefResource(resource);
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource);
}
void ReleaseResource(PP_Resource resource) {
- ResourceTracker::Get()->ReleaseResource(resource);
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resource);
}
PP_Time GetTime() {
@@ -204,7 +214,8 @@ void QuitMessageLoop(PP_Instance instance) {
}
uint32_t GetLiveObjectsForInstance(PP_Instance instance_id) {
- return ResourceTracker::Get()->GetLiveObjectsForInstance(instance_id);
+ return HostGlobals::Get()->host_resource_tracker()->GetLiveObjectsForInstance(
+ instance_id);
}
PP_Bool IsOutOfProcess() {
@@ -370,8 +381,12 @@ PluginModule::PluginModule(const std::string& name,
name_(name),
path_(path),
reserve_instance_id_(NULL) {
+ // Ensure the globals object is created.
+ if (!host_globals)
+ host_globals = new HostGlobals;
+
memset(&entry_points_, 0, sizeof(entry_points_));
- pp_module_ = ResourceTracker::Get()->AddModule(this);
+ pp_module_ = HostGlobals::Get()->host_resource_tracker()->AddModule(this);
GetMainThreadMessageLoop(); // Initialize the main thread message loop.
GetLivePluginSet()->insert(this);
}
@@ -397,7 +412,7 @@ PluginModule::~PluginModule() {
base::UnloadNativeLibrary(library_);
// Notifications that we've been deleted should be last.
- ResourceTracker::Get()->ModuleDeleted(pp_module_);
+ HostGlobals::Get()->host_resource_tracker()->ModuleDeleted(pp_module_);
if (!is_crashed_) {
// When the plugin crashes, we immediately tell the lifetime delegate that
// we're gone, so we don't want to tell it again.
diff --git a/webkit/plugins/ppapi/plugin_object.cc b/webkit/plugins/ppapi/plugin_object.cc
index 7b58456..fbbd349 100644
--- a/webkit/plugins/ppapi/plugin_object.cc
+++ b/webkit/plugins/ppapi/plugin_object.cc
@@ -15,6 +15,7 @@
#include "ppapi/c/dev/ppp_class_deprecated.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_var.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/var.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
#include "webkit/plugins/ppapi/npapi_glue.h"
@@ -23,6 +24,7 @@
#include "webkit/plugins/ppapi/resource_tracker.h"
#include "webkit/plugins/ppapi/string.h"
+using ppapi::PpapiGlobals;
using ppapi::StringVar;
using ppapi::Var;
using WebKit::WebBindings;
@@ -150,7 +152,7 @@ bool WrapperClass_SetProperty(NPObject* object, NPIdentifier property_name,
accessor.object()->ppp_class()->SetProperty(
accessor.object()->ppp_class_data(), accessor.identifier(), value_var,
result_converter.exception());
- ResourceTracker::Get()->GetVarTracker()->ReleaseVar(value_var);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(value_var);
return result_converter.CheckExceptionForNoResult();
}
@@ -215,7 +217,7 @@ bool WrapperClass_Enumerate(NPObject* object, NPIdentifier** values,
// Release the PP_Var that the plugin allocated. On success, they will all
// be converted to NPVariants, and on failure, we want them to just go away.
- ::ppapi::VarTracker* var_tracker = ResourceTracker::Get()->GetVarTracker();
+ ::ppapi::VarTracker* var_tracker = PpapiGlobals::Get()->GetVarTracker();
for (uint32_t i = 0; i < property_count; ++i)
var_tracker->ReleaseVar(properties[i]);
free(properties);
diff --git a/webkit/plugins/ppapi/ppapi_plugin_instance.cc b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
index cee2c8d..cf7610a 100644
--- a/webkit/plugins/ppapi/ppapi_plugin_instance.cc
+++ b/webkit/plugins/ppapi/ppapi_plugin_instance.cc
@@ -61,6 +61,7 @@
#include "webkit/plugins/ppapi/common.h"
#include "webkit/plugins/ppapi/event_conversion.h"
#include "webkit/plugins/ppapi/fullscreen_container.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/message_channel.h"
#include "webkit/plugins/ppapi/npapi_glue.h"
#include "webkit/plugins/ppapi/plugin_delegate.h"
@@ -101,6 +102,7 @@
using base::StringPrintf;
using ppapi::InputEventImpl;
+using ppapi::PpapiGlobals;
using ppapi::StringVar;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Buffer_API;
@@ -241,7 +243,8 @@ void RectToPPRect(const gfx::Rect& input, PP_Rect* output) {
// unchanged.
bool SecurityOriginForInstance(PP_Instance instance_id,
WebKit::WebSecurityOrigin* security_origin) {
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return false;
@@ -304,7 +307,7 @@ PluginInstance::PluginInstance(
text_input_caret_bounds_(0, 0, 0, 0),
text_input_caret_set_(false),
lock_mouse_callback_(PP_BlockUntilComplete()) {
- pp_instance_ = ResourceTracker::Get()->AddInstance(this);
+ pp_instance_ = HostGlobals::Get()->host_resource_tracker()->AddInstance(this);
memset(&current_print_settings_, 0, sizeof(current_print_settings_));
DCHECK(delegate);
@@ -333,7 +336,7 @@ PluginInstance::~PluginInstance() {
delegate_->InstanceDeleted(this);
module_->InstanceDeleted(this);
- ResourceTracker::Get()->InstanceDeleted(pp_instance_);
+ HostGlobals::Get()->host_resource_tracker()->InstanceDeleted(pp_instance_);
}
// NOTE: Any of these methods that calls into the plugin needs to take into
@@ -421,7 +424,7 @@ void PluginInstance::CommitBackingTexture() {
void PluginInstance::InstanceCrashed() {
// Force free all resources and vars.
- ResourceTracker::Get()->InstanceCrashed(pp_instance());
+ HostGlobals::Get()->host_resource_tracker()->InstanceCrashed(pp_instance());
// Free any associated graphics.
SetFullscreen(false, false);
@@ -860,7 +863,7 @@ string16 PluginInstance::GetSelectedText(bool html) {
if (string)
selection = UTF8ToUTF16(string->value());
// Release the ref the plugin transfered to us.
- ResourceTracker::Get()->GetVarTracker()->ReleaseVar(rv);
+ HostGlobals::Get()->GetVarTracker()->ReleaseVar(rv);
return selection;
}
@@ -879,7 +882,7 @@ string16 PluginInstance::GetLinkAtPosition(const gfx::Point& point) {
if (string)
link = UTF8ToUTF16(string->value());
// Release the ref the plugin transfered to us.
- ResourceTracker::Get()->GetVarTracker()->ReleaseVar(rv);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(rv);
return link;
}
diff --git a/webkit/plugins/ppapi/ppb_audio_impl.cc b/webkit/plugins/ppapi/ppb_audio_impl.cc
index e0f26e5..ea73f38 100644
--- a/webkit/plugins/ppapi/ppb_audio_impl.cc
+++ b/webkit/plugins/ppapi/ppb_audio_impl.cc
@@ -17,6 +17,7 @@
#include "webkit/plugins/ppapi/common.h"
#include "webkit/plugins/ppapi/resource_helper.h"
+using ppapi::PpapiGlobals;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Audio_API;
using ppapi::thunk::PPB_AudioConfig_API;
@@ -94,7 +95,7 @@ bool PPB_Audio_Impl::Init(PP_Resource config,
PP_Resource PPB_Audio_Impl::GetCurrentConfig() {
// AddRef on behalf of caller, while keeping a ref for ourselves.
- ::ppapi::TrackerBase::Get()->GetResourceTracker()->AddRefResource(config_);
+ PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(config_);
return config_;
}
diff --git a/webkit/plugins/ppapi/ppb_directory_reader_impl.cc b/webkit/plugins/ppapi/ppb_directory_reader_impl.cc
index da7112b..63279cd 100644
--- a/webkit/plugins/ppapi/ppb_directory_reader_impl.cc
+++ b/webkit/plugins/ppapi/ppb_directory_reader_impl.cc
@@ -9,6 +9,7 @@
#include "ppapi/c/pp_completion_callback.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/dev/ppb_directory_reader_dev.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/ppb_file_ref_api.h"
#include "webkit/plugins/ppapi/common.h"
@@ -21,6 +22,7 @@
#include "webkit/plugins/ppapi/resource_helper.h"
#include "webkit/plugins/ppapi/resource_tracker.h"
+using ::ppapi::PpapiGlobals;
using ::ppapi::thunk::EnterResourceNoLock;
using ::ppapi::thunk::PPB_DirectoryReader_API;
using ::ppapi::thunk::PPB_FileRef_API;
@@ -128,8 +130,10 @@ bool PPB_DirectoryReader_Impl::FillUpEntry() {
if (!entries_.empty()) {
base::FileUtilProxy::Entry dir_entry = entries_.front();
entries_.pop();
- if (entry_->file_ref)
- ResourceTracker::Get()->ReleaseResource(entry_->file_ref);
+ if (entry_->file_ref) {
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(
+ entry_->file_ref);
+ }
PPB_FileRef_Impl* file_ref = PPB_FileRef_Impl::CreateInternal(
directory_ref_->file_system()->pp_resource(),
diff --git a/webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc b/webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc
index 73ad13e..fdffadf 100644
--- a/webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc
+++ b/webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc
@@ -18,6 +18,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebKitPlatformSupport.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
#include "webkit/plugins/ppapi/common.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
#include "webkit/plugins/ppapi/resource_tracker.h"
@@ -64,7 +65,8 @@ PP_Bool IsFormatAvailable(PP_Instance instance_id,
PP_Flash_Clipboard_Type clipboard_type,
PP_Flash_Clipboard_Format format) {
// If you don't give us an instance, we don't give you anything.
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return PP_FALSE;
@@ -82,7 +84,8 @@ PP_Bool IsFormatAvailable(PP_Instance instance_id,
PP_Var ReadPlainText(PP_Instance instance_id,
PP_Flash_Clipboard_Type clipboard_type) {
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(instance_id);
if (!instance)
return PP_MakeNull();
diff --git a/webkit/plugins/ppapi/ppb_flash_file_impl.cc b/webkit/plugins/ppapi/ppb_flash_file_impl.cc
index de8b939..47b18f8 100644
--- a/webkit/plugins/ppapi/ppb_flash_file_impl.cc
+++ b/webkit/plugins/ppapi/ppb_flash_file_impl.cc
@@ -16,6 +16,7 @@
#include "webkit/plugins/ppapi/common.h"
#include "webkit/plugins/ppapi/file_path.h"
#include "webkit/plugins/ppapi/file_type_conversions.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/plugin_delegate.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
@@ -66,7 +67,8 @@ int32_t OpenModuleLocalFile(PP_Instance pp_instance,
if (!path || !PepperFileOpenFlagsToPlatformFileFlags(mode, &flags) || !file)
return PP_ERROR_BADARGUMENT;
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return PP_ERROR_FAILED;
@@ -85,7 +87,8 @@ int32_t RenameModuleLocalFile(PP_Instance pp_instance,
if (!from_path || !to_path)
return PP_ERROR_BADARGUMENT;
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return PP_ERROR_FAILED;
@@ -101,7 +104,8 @@ int32_t DeleteModuleLocalFileOrDir(PP_Instance pp_instance,
if (!path)
return PP_ERROR_BADARGUMENT;
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return PP_ERROR_FAILED;
@@ -115,7 +119,8 @@ int32_t CreateModuleLocalDir(PP_Instance pp_instance, const char* path) {
if (!path)
return PP_ERROR_BADARGUMENT;
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return PP_ERROR_FAILED;
@@ -130,7 +135,8 @@ int32_t QueryModuleLocalFile(PP_Instance pp_instance,
if (!path || !info)
return PP_ERROR_BADARGUMENT;
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return PP_ERROR_FAILED;
@@ -157,7 +163,8 @@ int32_t GetModuleLocalDirContents(PP_Instance pp_instance,
PP_DirContents_Dev** contents) {
if (!path || !contents)
return PP_ERROR_BADARGUMENT;
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return PP_ERROR_FAILED;
diff --git a/webkit/plugins/ppapi/ppb_flash_impl.cc b/webkit/plugins/ppapi/ppb_flash_impl.cc
index 58354db..78d5677 100644
--- a/webkit/plugins/ppapi/ppb_flash_impl.cc
+++ b/webkit/plugins/ppapi/ppb_flash_impl.cc
@@ -14,6 +14,7 @@
#include "ppapi/shared_impl/var.h"
#include "ppapi/thunk/enter.h"
#include "webkit/plugins/ppapi/common.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/plugin_delegate.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
@@ -32,14 +33,16 @@ namespace ppapi {
namespace {
void SetInstanceAlwaysOnTop(PP_Instance pp_instance, PP_Bool on_top) {
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return;
instance->set_always_on_top(PPBoolToBool(on_top));
}
PP_Var GetProxyForURL(PP_Instance pp_instance, const char* url) {
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return PP_MakeUndefined();
@@ -83,7 +86,8 @@ void QuitMessageLoop(PP_Instance instance) {
}
double GetLocalTimeZoneOffset(PP_Instance pp_instance, PP_Time t) {
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance)
return 0.0;
@@ -101,7 +105,8 @@ double GetLocalTimeZoneOffset(PP_Instance pp_instance, PP_Time t) {
}
PP_Var GetCommandLineArgs(PP_Module pp_module) {
- PluginModule* module = ResourceTracker::Get()->GetModule(pp_module);
+ PluginModule* module =
+ HostGlobals::Get()->host_resource_tracker()->GetModule(pp_module);
if (!module)
return PP_MakeUndefined();
diff --git a/webkit/plugins/ppapi/ppb_proxy_impl.cc b/webkit/plugins/ppapi/ppb_proxy_impl.cc
index ece3410..884ad7d 100644
--- a/webkit/plugins/ppapi/ppb_proxy_impl.cc
+++ b/webkit/plugins/ppapi/ppb_proxy_impl.cc
@@ -7,11 +7,13 @@
#include "ppapi/c/private/ppb_proxy_private.h"
#include "ppapi/thunk/enter.h"
#include "ppapi/thunk/ppb_image_data_api.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
#include "webkit/plugins/ppapi/ppb_url_loader_impl.h"
#include "webkit/plugins/ppapi/resource_tracker.h"
+using ppapi::PpapiGlobals;
using ppapi::thunk::EnterResource;
using ppapi::thunk::PPB_URLLoader_API;
@@ -21,13 +23,15 @@ namespace ppapi {
namespace {
void PluginCrashed(PP_Module module) {
- PluginModule* plugin_module = ResourceTracker::Get()->GetModule(module);
+ PluginModule* plugin_module =
+ HostGlobals::Get()->host_resource_tracker()->GetModule(module);
if (plugin_module)
plugin_module->PluginCrashed();
}
PP_Instance GetInstanceForResource(PP_Resource resource) {
- ::ppapi::Resource* obj = ResourceTracker::Get()->GetResource(resource);
+ ::ppapi::Resource* obj =
+ PpapiGlobals::Get()->GetResourceTracker()->GetResource(resource);
if (!obj)
return 0;
return obj->pp_instance();
@@ -35,7 +39,8 @@ PP_Instance GetInstanceForResource(PP_Resource resource) {
void SetReserveInstanceIDCallback(PP_Module module,
PP_Bool (*reserve)(PP_Module, PP_Instance)) {
- PluginModule* plugin_module = ResourceTracker::Get()->GetModule(module);
+ PluginModule* plugin_module =
+ HostGlobals::Get()->host_resource_tracker()->GetModule(module);
if (plugin_module)
plugin_module->SetReserveInstanceIDCallback(reserve);
}
@@ -48,19 +53,22 @@ int32_t GetURLLoaderBufferedBytes(PP_Resource url_loader) {
}
void AddRefModule(PP_Module module) {
- PluginModule* plugin_module = ResourceTracker::Get()->GetModule(module);
+ PluginModule* plugin_module =
+ HostGlobals::Get()->host_resource_tracker()->GetModule(module);
if (plugin_module)
plugin_module->AddRef();
}
void ReleaseModule(PP_Module module) {
- PluginModule* plugin_module = ResourceTracker::Get()->GetModule(module);
+ PluginModule* plugin_module =
+ HostGlobals::Get()->host_resource_tracker()->GetModule(module);
if (plugin_module)
plugin_module->Release();
}
PP_Bool IsInModuleDestructor(PP_Module module) {
- PluginModule* plugin_module = ResourceTracker::Get()->GetModule(module);
+ PluginModule* plugin_module =
+ HostGlobals::Get()->host_resource_tracker()->GetModule(module);
if (plugin_module)
return PP_FromBool(plugin_module->is_in_destructor());
return PP_FALSE;
diff --git a/webkit/plugins/ppapi/ppb_var_impl.cc b/webkit/plugins/ppapi/ppb_var_impl.cc
index 384d449..59df63d 100644
--- a/webkit/plugins/ppapi/ppb_var_impl.cc
+++ b/webkit/plugins/ppapi/ppb_var_impl.cc
@@ -11,6 +11,7 @@
#include "ppapi/c/pp_var.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
#include "webkit/plugins/ppapi/common.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/npapi_glue.h"
#include "webkit/plugins/ppapi/npobject_var.h"
#include "webkit/plugins/ppapi/plugin_module.h"
@@ -20,6 +21,7 @@
#include "v8/include/v8.h"
using ppapi::NPObjectVar;
+using ppapi::PpapiGlobals;
using ppapi::StringVar;
using ppapi::Var;
using WebKit::WebBindings;
@@ -124,7 +126,8 @@ class ObjectAccessorTryCatch : public TryCatch {
NPObjectVar* object() { return object_.get(); }
PluginInstance* GetPluginInstance() {
- return ResourceTracker::Get()->GetInstance(object()->pp_instance());
+ return HostGlobals::Get()->host_resource_tracker()->GetInstance(
+ object()->pp_instance());
}
protected:
@@ -170,11 +173,11 @@ class ObjectAccessorWithIdentifierTryCatch : public ObjectAccessorTryCatch {
// PPB_Var methods -------------------------------------------------------------
void AddRefVar(PP_Var var) {
- ResourceTracker::Get()->GetVarTracker()->AddRefVar(var);
+ PpapiGlobals::Get()->GetVarTracker()->AddRefVar(var);
}
void ReleaseVar(PP_Var var) {
- ResourceTracker::Get()->GetVarTracker()->ReleaseVar(var);
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(var);
}
PP_Var VarFromUtf8(PP_Module module, const char* data, uint32_t len) {
@@ -404,10 +407,11 @@ bool IsInstanceOfDeprecated(PP_Var var,
ppp_class, ppp_class_data);
}
-PP_Var CreateObjectDeprecated(PP_Instance instance_id,
+PP_Var CreateObjectDeprecated(PP_Instance pp_instance,
const PPP_Class_Deprecated* ppp_class,
void* ppp_class_data) {
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance);
if (!instance) {
DLOG(ERROR) << "Create object passed an invalid instance.";
return PP_MakeNull();
@@ -415,10 +419,11 @@ PP_Var CreateObjectDeprecated(PP_Instance instance_id,
return PluginObject::Create(instance, ppp_class, ppp_class_data);
}
-PP_Var CreateObjectWithModuleDeprecated(PP_Module module_id,
+PP_Var CreateObjectWithModuleDeprecated(PP_Module pp_module,
const PPP_Class_Deprecated* ppp_class,
void* ppp_class_data) {
- PluginModule* module = ResourceTracker::Get()->GetModule(module_id);
+ PluginModule* module =
+ HostGlobals::Get()->host_resource_tracker()->GetModule(pp_module);
if (!module)
return PP_MakeNull();
return PluginObject::Create(module->GetSomeInstance(),
diff --git a/webkit/plugins/ppapi/ppb_video_capture_impl.cc b/webkit/plugins/ppapi/ppb_video_capture_impl.cc
index de97914..466125c 100644
--- a/webkit/plugins/ppapi/ppb_video_capture_impl.cc
+++ b/webkit/plugins/ppapi/ppb_video_capture_impl.cc
@@ -12,6 +12,7 @@
#include "ppapi/c/dev/ppb_video_capture_dev.h"
#include "ppapi/c/pp_completion_callback.h"
#include "ppapi/c/pp_errors.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/thunk/enter.h"
#include "webkit/plugins/ppapi/common.h"
#include "webkit/plugins/ppapi/plugin_module.h"
@@ -20,6 +21,7 @@
#include "webkit/plugins/ppapi/resource_helper.h"
#include "webkit/plugins/ppapi/resource_tracker.h"
+using ppapi::PpapiGlobals;
using ppapi::thunk::EnterResourceNoLock;
using ppapi::thunk::PPB_Buffer_API;
using ppapi::thunk::PPB_VideoCapture_API;
@@ -265,7 +267,7 @@ void PPB_VideoCapture_Impl::OnDeviceInfoReceived(
info.buffer = static_cast<PPB_Buffer_Impl*>(enter.object());
info.data = info.buffer->Map();
if (!info.data) {
- ResourceTracker::Get()->ReleaseResource(resources[i]);
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(resources[i]);
break;
}
buffers_.push_back(info);
@@ -286,7 +288,7 @@ void PPB_VideoCapture_Impl::OnDeviceInfoReceived(
void PPB_VideoCapture_Impl::ReleaseBuffers() {
DCHECK(!is_dead_);
- ResourceTracker *tracker = ResourceTracker::Get();
+ ::ppapi::ResourceTracker* tracker = PpapiGlobals::Get()->GetResourceTracker();
for (size_t i = 0; i < buffers_.size(); ++i) {
buffers_[i].buffer->Unmap();
tracker->ReleaseResource(buffers_[i].buffer->pp_resource());
diff --git a/webkit/plugins/ppapi/quota_file_io.cc b/webkit/plugins/ppapi/quota_file_io.cc
index 654fb88..8911dab 100644
--- a/webkit/plugins/ppapi/quota_file_io.cc
+++ b/webkit/plugins/ppapi/quota_file_io.cc
@@ -12,6 +12,7 @@
#include "base/message_loop_proxy.h"
#include "base/stl_util.h"
#include "base/task.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
#include "webkit/plugins/ppapi/resource_helper.h"
#include "webkit/plugins/ppapi/resource_tracker.h"
@@ -270,7 +271,8 @@ bool QuotaFileIO::WillSetLength(int64_t length,
}
PluginDelegate* QuotaFileIO::GetPluginDelegate() const {
- PluginInstance* instance = ResourceTracker::Get()->GetInstance(pp_instance_);
+ PluginInstance* instance =
+ HostGlobals::Get()->host_resource_tracker()->GetInstance(pp_instance_);
if (instance)
return instance->delegate();
return NULL;
diff --git a/webkit/plugins/ppapi/resource_helper.cc b/webkit/plugins/ppapi/resource_helper.cc
index 27f303d..cdea783 100644
--- a/webkit/plugins/ppapi/resource_helper.cc
+++ b/webkit/plugins/ppapi/resource_helper.cc
@@ -6,6 +6,7 @@
#include "base/logging.h"
#include "ppapi/shared_impl/resource.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
@@ -17,7 +18,7 @@ namespace ppapi {
// static
PluginInstance* ResourceHelper::GetPluginInstance(
const ::ppapi::Resource* resource) {
- ResourceTracker* tracker = ResourceTracker::Get();
+ ResourceTracker* tracker = HostGlobals::Get()->host_resource_tracker();
return tracker->GetInstance(resource->pp_instance());
}
diff --git a/webkit/plugins/ppapi/resource_tracker.cc b/webkit/plugins/ppapi/resource_tracker.cc
index 6b0de7d..0743723 100644
--- a/webkit/plugins/ppapi/resource_tracker.cc
+++ b/webkit/plugins/ppapi/resource_tracker.cc
@@ -15,6 +15,7 @@
#include "ppapi/shared_impl/id_assignment.h"
#include "ppapi/shared_impl/tracker_base.h"
#include "webkit/plugins/ppapi/callbacks.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/npobject_var.h"
#include "webkit/plugins/ppapi/plugin_module.h"
#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
@@ -36,7 +37,7 @@ namespace ppapi {
namespace {
::ppapi::TrackerBase* GetTrackerBase() {
- return ResourceTracker::Get();
+ return HostGlobals::Get()->host_resource_tracker();
}
} // namespace
@@ -61,10 +62,6 @@ struct ResourceTracker::InstanceData {
function_proxies[::ppapi::proxy::INTERFACE_ID_COUNT];
};
-// static
-ResourceTracker* ResourceTracker::global_tracker_ = NULL;
-ResourceTracker* ResourceTracker::singleton_override_ = NULL;
-
ResourceTracker::ResourceTracker() {
// Wire up the new shared resource tracker base to use our implementation.
::ppapi::TrackerBase::Init(&GetTrackerBase);
@@ -73,15 +70,6 @@ ResourceTracker::ResourceTracker() {
ResourceTracker::~ResourceTracker() {
}
-// static
-ResourceTracker* ResourceTracker::Get() {
- if (singleton_override_)
- return singleton_override_;
- if (!global_tracker_)
- global_tracker_ = new ResourceTracker;
- return global_tracker_;
-}
-
void ResourceTracker::CleanupInstanceData(PP_Instance instance,
bool delete_instance) {
DLOG_IF(ERROR, !CheckIdType(instance, ::ppapi::PP_ID_TYPE_INSTANCE))
@@ -154,14 +142,6 @@ void ResourceTracker::CleanupInstanceData(PP_Instance instance,
return proxy.get();
}
-::ppapi::VarTracker* ResourceTracker::GetVarTracker() {
- return &var_tracker_;
-}
-
-::ppapi::ResourceTracker* ResourceTracker::GetResourceTracker() {
- return this;
-}
-
PP_Module ResourceTracker::GetModuleForInstance(PP_Instance instance) {
PluginInstance* inst = GetInstance(instance);
if (!inst)
@@ -309,17 +289,5 @@ PluginModule* ResourceTracker::GetModule(PP_Module module) {
return found->second;
}
-// static
-void ResourceTracker::SetSingletonOverride(ResourceTracker* tracker) {
- DCHECK(!singleton_override_);
- singleton_override_ = tracker;
-}
-
-// static
-void ResourceTracker::ClearSingletonOverride() {
- DCHECK(singleton_override_);
- singleton_override_ = NULL;
-}
-
} // namespace ppapi
} // namespace webkit
diff --git a/webkit/plugins/ppapi/resource_tracker.h b/webkit/plugins/ppapi/resource_tracker.h
index 79de8be..221a8f9 100644
--- a/webkit/plugins/ppapi/resource_tracker.h
+++ b/webkit/plugins/ppapi/resource_tracker.h
@@ -45,8 +45,8 @@ class ResourceTrackerTest;
class ResourceTracker : public ::ppapi::TrackerBase,
public ::ppapi::ResourceTracker {
public:
- // Returns the pointer to the singleton object.
- static ResourceTracker* Get();
+ ResourceTracker();
+ virtual ~ResourceTracker();
// PP_Resources --------------------------------------------------------------
@@ -54,8 +54,6 @@ class ResourceTracker : public ::ppapi::TrackerBase,
virtual ::ppapi::FunctionGroupBase* GetFunctionAPI(
PP_Instance pp_instance,
::ppapi::proxy::InterfaceID id) OVERRIDE;
- virtual ::ppapi::VarTracker* GetVarTracker() OVERRIDE;
- virtual ::ppapi::ResourceTracker* GetResourceTracker() OVERRIDE;
virtual PP_Module GetModuleForInstance(PP_Instance instance) OVERRIDE;
// ppapi::ResourceTracker overrides.
@@ -119,46 +117,11 @@ class ResourceTracker : public ::ppapi::TrackerBase,
// Per-instance data we track.
struct InstanceData;
- // Prohibit creation other then by the Singleton class.
- ResourceTracker();
- virtual ~ResourceTracker();
-
// Force frees all vars and resources associated with the given instance.
// If delete_instance is true, the instance tracking information will also
// be deleted.
void CleanupInstanceData(PP_Instance instance, bool delete_instance);
- // Overrides the singleton object. This is used for tests which want to
- // specify their own tracker (otherwise, you can get cross-talk between
- // tests since the data will live into the subsequent tests).
- static void SetSingletonOverride(ResourceTracker* tracker);
- static void ClearSingletonOverride();
-
- // The lazy-initialized global instance of this object. This is created in
- // ::Get() if there is no singleton_override_ specified.
- //
- // It would be nice to use LazyInstance for this since it manages the
- // creation properly, and also cleans up on shutdown. However, the shutdown
- // cleanup causes problems in some cases.
- //
- // For example, say the browser crashes or is killed. The renderer then
- // decides to exit. Normally resources are bound to an instance and are
- // cleaned up when WebKit deletes the instance (when you go to a different
- // page or close that view). In this case, WebKit doesn't clean up. If the
- // ResourceTracker was cleaned up by the AtExitManager (which would be the
- // case with LazyInstance/Singleton) then we'd try to call up to the renderer
- // layer via the delegate, which may be in a random state of shutdown.
- //
- // So effectively our rule is: any resources still around at shutdown are
- // associated with leaked plugins in WebKit, so it's also OK to leak those
- // resources from here (avoiding the shutdown race).
- static ResourceTracker* global_tracker_;
-
- // See SetSingletonOverride above.
- static ResourceTracker* singleton_override_;
-
- ::ppapi::VarTracker var_tracker_;
-
// Like ResourceAndRefCount but for vars, which are associated with modules.
typedef std::pair<scoped_refptr< ::ppapi::Var>, size_t> VarAndRefCount;
typedef base::hash_map<int32, VarAndRefCount> VarMap;
diff --git a/webkit/plugins/ppapi/resource_tracker_unittest.cc b/webkit/plugins/ppapi/resource_tracker_unittest.cc
index 0b418bb..68a4b2f 100644
--- a/webkit/plugins/ppapi/resource_tracker_unittest.cc
+++ b/webkit/plugins/ppapi/resource_tracker_unittest.cc
@@ -9,6 +9,7 @@
#include "ppapi/c/ppp_instance.h"
#include "third_party/npapi/bindings/npruntime.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h"
+#include "webkit/plugins/ppapi/host_globals.h"
#include "webkit/plugins/ppapi/mock_plugin_delegate.h"
#include "webkit/plugins/ppapi/mock_resource.h"
#include "webkit/plugins/ppapi/npapi_glue.h"
@@ -78,23 +79,9 @@ class ResourceTrackerTest : public PpapiUnittest {
ResourceTrackerTest() {
}
- virtual void SetUp() {
- // The singleton override must be installed before the generic setup because
- // that creates an instance, etc. which uses the tracker.
- ResourceTracker::SetSingletonOverride(&tracker_);
- PpapiUnittest::SetUp();
+ ResourceTracker& tracker() {
+ return *HostGlobals::Get()->host_resource_tracker();
}
- virtual void TearDown() {
- // Must do normal tear down before clearing the override for the same rason
- // as the SetUp.
- PpapiUnittest::TearDown();
- ResourceTracker::ClearSingletonOverride();
- }
-
- ResourceTracker& tracker() { return tracker_; }
-
- private:
- ResourceTracker tracker_;
};
TEST_F(ResourceTrackerTest, DeleteObjectVarWithInstance) {
@@ -138,7 +125,8 @@ TEST_F(ResourceTrackerTest, ReuseVar) {
}
// Remove both of the refs we made above.
- ::ppapi::VarTracker* var_tracker = tracker().GetVarTracker();
+ ::ppapi::VarTracker* var_tracker =
+ ::ppapi::PpapiGlobals::Get()->GetVarTracker();
var_tracker->ReleaseVar(static_cast<int32_t>(pp_object2.value.as_id));
var_tracker->ReleaseVar(static_cast<int32_t>(pp_object1.value.as_id));