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" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread_local.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_thread.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_manager_factory.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/renderer/browser_plugin/browser_plugin_manager_impl.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BrowserPluginManagerFactory* BrowserPluginManager::factory_ = NULL; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BrowserPluginManager* BrowserPluginManager::Create( 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewImpl* render_view) { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (factory_) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return factory_->CreateBrowserPluginManager(render_view); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new BrowserPluginManagerImpl(render_view); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)BrowserPluginManager::BrowserPluginManager(RenderViewImpl* render_view) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : RenderViewObserver(render_view), 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_(render_view->AsWeakPtr()) { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserPluginManager::~BrowserPluginManager() { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserPluginManager::AddBrowserPlugin( 35868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int guest_instance_id, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserPlugin* browser_plugin) { 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) instances_.AddWithID(browser_plugin, guest_instance_id); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void BrowserPluginManager::RemoveBrowserPlugin(int guest_instance_id) { 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) instances_.Remove(guest_instance_id); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)BrowserPlugin* BrowserPluginManager::GetBrowserPlugin( 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int guest_instance_id) const { 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return instances_.Lookup(guest_instance_id); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BrowserPluginManager::UpdateDeviceScaleFactor(float device_scale_factor) { 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDMap<BrowserPlugin>::iterator iter(&instances_); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) while (!iter.IsAtEnd()) { 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter.GetCurrentValue()->UpdateDeviceScaleFactor(device_scale_factor); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) iter.Advance(); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void BrowserPluginManager::UpdateFocusState() { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDMap<BrowserPlugin>::iterator iter(&instances_); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!iter.IsAtEnd()) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) iter.GetCurrentValue()->UpdateGuestFocusState(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter.Advance(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 66