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