15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_manager.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h" 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread_local.h" 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/values.h" 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/common/browser_plugin/browser_plugin_constants.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_thread.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_manager_factory.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_manager_impl.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BrowserPluginManagerFactory* BrowserPluginManager::factory_ = NULL; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BrowserPluginManager* BrowserPluginManager::Create( 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl* render_view) { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (factory_) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return factory_->CreateBrowserPluginManager(render_view); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new BrowserPluginManagerImpl(render_view); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BrowserPluginManager::BrowserPluginManager(RenderViewImpl* render_view) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : RenderViewObserver(render_view), 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) current_instance_id_(browser_plugin::kInstanceIDNone), 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_(render_view->AsWeakPtr()) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserPluginManager::~BrowserPluginManager() { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserPluginManager::AddBrowserPlugin( 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int browser_plugin_instance_id, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserPlugin* browser_plugin) { 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) instances_.AddWithID(browser_plugin, browser_plugin_instance_id); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void BrowserPluginManager::RemoveBrowserPlugin(int browser_plugin_instance_id) { 4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) instances_.Remove(browser_plugin_instance_id); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)BrowserPlugin* BrowserPluginManager::GetBrowserPlugin( 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int browser_plugin_instance_id) const { 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return instances_.Lookup(browser_plugin_instance_id); 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)int BrowserPluginManager::GetNextInstanceID() { 5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return ++current_instance_id_; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid BrowserPluginManager::UpdateDeviceScaleFactor() { 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDMap<BrowserPlugin>::iterator iter(&instances_); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) while (!iter.IsAtEnd()) { 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci iter.GetCurrentValue()->UpdateDeviceScaleFactor(); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter.Advance(); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void BrowserPluginManager::UpdateFocusState() { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDMap<BrowserPlugin>::iterator iter(&instances_); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!iter.IsAtEnd()) { 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter.GetCurrentValue()->UpdateGuestFocusState(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter.Advance(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void BrowserPluginManager::Attach(int browser_plugin_instance_id) { 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) BrowserPlugin* plugin = GetBrowserPlugin(browser_plugin_instance_id); 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (plugin) 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) plugin->Attach(); 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 81