Index: webkit/plugins/ppapi/host_globals.cc |
=================================================================== |
--- webkit/plugins/ppapi/host_globals.cc (revision 213561) |
+++ webkit/plugins/ppapi/host_globals.cc (working copy) |
@@ -1,285 +0,0 @@ |
-// Copyright (c) 2012 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" |
- |
-#include <limits> |
- |
-#include "base/command_line.h" |
-#include "base/logging.h" |
-#include "base/rand_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/task_runner.h" |
-#include "ppapi/shared_impl/api_id.h" |
-#include "ppapi/shared_impl/id_assignment.h" |
-#include "third_party/WebKit/public/platform/WebString.h" |
-#include "third_party/WebKit/public/web/WebConsoleMessage.h" |
-#include "third_party/WebKit/public/web/WebDocument.h" |
-#include "third_party/WebKit/public/web/WebElement.h" |
-#include "third_party/WebKit/public/web/WebFrame.h" |
-#include "third_party/WebKit/public/web/WebPluginContainer.h" |
-#include "webkit/plugins/plugin_switches.h" |
-#include "webkit/plugins/ppapi/plugin_module.h" |
-#include "webkit/plugins/ppapi/ppapi_plugin_instance_impl.h" |
- |
-using ppapi::CheckIdType; |
-using ppapi::MakeTypedId; |
-using ppapi::PPIdType; |
-using ppapi::ResourceTracker; |
-using WebKit::WebConsoleMessage; |
-using WebKit::WebString; |
- |
-namespace webkit { |
-namespace ppapi { |
- |
-namespace { |
- |
-typedef std::set<WebKit::WebPluginContainer*> ContainerSet; |
- |
-// Adds all WebPluginContainers associated with the given module to the set. |
-void GetAllContainersForModule(PluginModule* module, |
- ContainerSet* containers) { |
- const PluginModule::PluginInstanceSet& instances = |
- module->GetAllInstances(); |
- for (PluginModule::PluginInstanceSet::const_iterator i = instances.begin(); |
- i != instances.end(); ++i) |
- containers->insert((*i)->container()); |
-} |
- |
-WebConsoleMessage::Level LogLevelToWebLogLevel(PP_LogLevel level) { |
- switch (level) { |
- case PP_LOGLEVEL_TIP: |
- return WebConsoleMessage::LevelDebug; |
- case PP_LOGLEVEL_LOG: |
- return WebConsoleMessage::LevelLog; |
- case PP_LOGLEVEL_WARNING: |
- return WebConsoleMessage::LevelWarning; |
- case PP_LOGLEVEL_ERROR: |
- default: |
- return WebConsoleMessage::LevelError; |
- } |
-} |
- |
-WebConsoleMessage MakeLogMessage(PP_LogLevel level, |
- const std::string& source, |
- const std::string& message) { |
- std::string result = source; |
- if (!result.empty()) |
- result.append(": "); |
- result.append(message); |
- return WebConsoleMessage(LogLevelToWebLogLevel(level), |
- WebString(UTF8ToUTF16(result))); |
-} |
- |
-} // namespace |
- |
-HostGlobals* HostGlobals::host_globals_ = NULL; |
- |
-HostGlobals::HostGlobals() |
- : ::ppapi::PpapiGlobals(), |
- resource_tracker_(ResourceTracker::SINGLE_THREADED) { |
- DCHECK(!host_globals_); |
- host_globals_ = this; |
-} |
- |
-HostGlobals::HostGlobals( |
- ::ppapi::PpapiGlobals::PerThreadForTest per_thread_for_test) |
- : ::ppapi::PpapiGlobals(per_thread_for_test), |
- resource_tracker_(ResourceTracker::SINGLE_THREADED) { |
- DCHECK(!host_globals_); |
-} |
- |
-HostGlobals::~HostGlobals() { |
- DCHECK(host_globals_ == this || !host_globals_); |
- host_globals_ = NULL; |
-} |
- |
-::ppapi::ResourceTracker* HostGlobals::GetResourceTracker() { |
- return &resource_tracker_; |
-} |
- |
-::ppapi::VarTracker* HostGlobals::GetVarTracker() { |
- return &host_var_tracker_; |
-} |
- |
-::ppapi::CallbackTracker* HostGlobals::GetCallbackTrackerForInstance( |
- PP_Instance instance) { |
- InstanceMap::iterator found = instance_map_.find(instance); |
- if (found == instance_map_.end()) |
- return NULL; |
- return found->second->module()->GetCallbackTracker().get(); |
-} |
- |
-::ppapi::thunk::PPB_Instance_API* HostGlobals::GetInstanceAPI( |
- PP_Instance instance) { |
- // The InstanceAPI is just implemented by the PluginInstance object. |
- return GetInstance(instance); |
-} |
- |
-::ppapi::thunk::ResourceCreationAPI* HostGlobals::GetResourceCreationAPI( |
- PP_Instance pp_instance) { |
- PluginInstanceImpl* instance = GetInstance(pp_instance); |
- if (!instance) |
- return NULL; |
- return &instance->resource_creation(); |
-} |
- |
-PP_Module HostGlobals::GetModuleForInstance(PP_Instance instance) { |
- PluginInstanceImpl* inst = GetInstance(instance); |
- if (!inst) |
- return 0; |
- return inst->module()->pp_module(); |
-} |
- |
-std::string HostGlobals::GetCmdLine() { |
- return CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
- switches::kPpapiFlashArgs); |
-} |
- |
-void HostGlobals::PreCacheFontForFlash(const void* logfontw) { |
- // Not implemented in-process. |
-} |
- |
-base::Lock* HostGlobals::GetProxyLock() { |
- // We do not lock on the host side. |
- return NULL; |
-} |
- |
-void HostGlobals::LogWithSource(PP_Instance instance, |
- PP_LogLevel level, |
- const std::string& source, |
- const std::string& value) { |
- PluginInstanceImpl* instance_object = |
- HostGlobals::Get()->GetInstance(instance); |
- if (instance_object) { |
- instance_object->container()->element().document().frame()-> |
- addMessageToConsole(MakeLogMessage(level, source, value)); |
- } else { |
- BroadcastLogWithSource(0, level, source, value); |
- } |
-} |
- |
-void HostGlobals::BroadcastLogWithSource(PP_Module pp_module, |
- PP_LogLevel level, |
- const std::string& source, |
- const std::string& value) { |
- // Get the unique containers associated with the broadcast. This prevents us |
- // from sending the same message to the same console when there are two |
- // instances on the page. |
- ContainerSet containers; |
- PluginModule* module = GetModule(pp_module); |
- if (module) { |
- GetAllContainersForModule(module, &containers); |
- } else { |
- // Unknown module, get containers for all modules. |
- for (ModuleMap::const_iterator i = module_map_.begin(); |
- i != module_map_.end(); ++i) { |
- GetAllContainersForModule(i->second, &containers); |
- } |
- } |
- |
- WebConsoleMessage message = MakeLogMessage(level, source, value); |
- for (ContainerSet::iterator i = containers.begin(); |
- i != containers.end(); ++i) |
- (*i)->element().document().frame()->addMessageToConsole(message); |
-} |
- |
-base::TaskRunner* HostGlobals::GetFileTaskRunner(PP_Instance instance) { |
- scoped_refptr<PluginInstanceImpl> plugin_instance = GetInstance(instance); |
- DCHECK(plugin_instance.get()); |
- scoped_refptr<base::MessageLoopProxy> message_loop = |
- plugin_instance->delegate()->GetFileThreadMessageLoopProxy(); |
- return message_loop.get(); |
-} |
- |
-::ppapi::MessageLoopShared* HostGlobals::GetCurrentMessageLoop() { |
- return NULL; |
-} |
- |
-PP_Module HostGlobals::AddModule(PluginModule* module) { |
-#ifndef NDEBUG |
- // Make sure we're not adding one more than once. |
- for (ModuleMap::const_iterator i = module_map_.begin(); |
- i != module_map_.end(); ++i) |
- DCHECK(i->second != module); |
-#endif |
- |
- // See AddInstance. |
- PP_Module new_module; |
- do { |
- new_module = MakeTypedId(static_cast<PP_Module>(base::RandUint64()), |
- ::ppapi::PP_ID_TYPE_MODULE); |
- } while (!new_module || |
- module_map_.find(new_module) != module_map_.end()); |
- module_map_[new_module] = module; |
- return new_module; |
-} |
- |
-void HostGlobals::ModuleDeleted(PP_Module module) { |
- DLOG_IF(ERROR, !CheckIdType(module, ::ppapi::PP_ID_TYPE_MODULE)) |
- << module << " is not a PP_Module."; |
- ModuleMap::iterator found = module_map_.find(module); |
- if (found == module_map_.end()) { |
- NOTREACHED(); |
- return; |
- } |
- module_map_.erase(found); |
-} |
- |
-PluginModule* HostGlobals::GetModule(PP_Module module) { |
- DLOG_IF(ERROR, !CheckIdType(module, ::ppapi::PP_ID_TYPE_MODULE)) |
- << module << " is not a PP_Module."; |
- ModuleMap::iterator found = module_map_.find(module); |
- if (found == module_map_.end()) |
- return NULL; |
- return found->second; |
-} |
- |
-PP_Instance HostGlobals::AddInstance(PluginInstanceImpl* instance) { |
- DCHECK(instance_map_.find(instance->pp_instance()) == instance_map_.end()); |
- |
- // Use a random number for the instance ID. This helps prevent some |
- // accidents. See also AddModule below. |
- // |
- // Need to make sure the random number isn't a duplicate or 0. |
- PP_Instance new_instance; |
- do { |
- new_instance = MakeTypedId(static_cast<PP_Instance>(base::RandUint64()), |
- ::ppapi::PP_ID_TYPE_INSTANCE); |
- } while (!new_instance || |
- instance_map_.find(new_instance) != instance_map_.end() || |
- !instance->module()->ReserveInstanceID(new_instance)); |
- |
- instance_map_[new_instance] = instance; |
- |
- resource_tracker_.DidCreateInstance(new_instance); |
- return new_instance; |
-} |
- |
-void HostGlobals::InstanceDeleted(PP_Instance instance) { |
- resource_tracker_.DidDeleteInstance(instance); |
- host_var_tracker_.DidDeleteInstance(instance); |
- instance_map_.erase(instance); |
-} |
- |
-void HostGlobals::InstanceCrashed(PP_Instance instance) { |
- resource_tracker_.DidDeleteInstance(instance); |
- host_var_tracker_.DidDeleteInstance(instance); |
-} |
- |
-PluginInstanceImpl* HostGlobals::GetInstance(PP_Instance instance) { |
- DLOG_IF(ERROR, !CheckIdType(instance, ::ppapi::PP_ID_TYPE_INSTANCE)) |
- << instance << " is not a PP_Instance."; |
- InstanceMap::iterator found = instance_map_.find(instance); |
- if (found == instance_map_.end()) |
- return NULL; |
- return found->second; |
-} |
- |
-bool HostGlobals::IsHostGlobals() const { |
- return true; |
-} |
- |
-} // namespace ppapi |
-} // namespace webkit |