1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "content/public/browser/browser_thread.h" 6#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" 7 8using content::BrowserThread; 9 10namespace extensions { 11 12// static 13WebViewRendererState* WebViewRendererState::GetInstance() { 14 return Singleton<WebViewRendererState>::get(); 15} 16 17WebViewRendererState::WebViewRendererState() { 18} 19 20WebViewRendererState::~WebViewRendererState() { 21} 22 23bool WebViewRendererState::IsGuest(int render_process_id) { 24 DCHECK_CURRENTLY_ON(BrowserThread::IO); 25 return webview_partition_id_map_.find(render_process_id) != 26 webview_partition_id_map_.end(); 27} 28 29void WebViewRendererState::AddGuest(int guest_process_id, 30 int guest_routing_id, 31 const WebViewInfo& webview_info) { 32 DCHECK_CURRENTLY_ON(BrowserThread::IO); 33 RenderId render_id(guest_process_id, guest_routing_id); 34 webview_info_map_[render_id] = webview_info; 35 WebViewPartitionIDMap::iterator iter = 36 webview_partition_id_map_.find(guest_process_id); 37 if (iter != webview_partition_id_map_.end()) { 38 ++iter->second.web_view_count; 39 return; 40 } 41 WebViewPartitionInfo partition_info(1, webview_info.partition_id); 42 webview_partition_id_map_[guest_process_id] = partition_info; 43} 44 45void WebViewRendererState::RemoveGuest(int guest_process_id, 46 int guest_routing_id) { 47 DCHECK_CURRENTLY_ON(BrowserThread::IO); 48 RenderId render_id(guest_process_id, guest_routing_id); 49 webview_info_map_.erase(render_id); 50 WebViewPartitionIDMap::iterator iter = 51 webview_partition_id_map_.find(guest_process_id); 52 if (iter != webview_partition_id_map_.end() && 53 iter->second.web_view_count > 1) { 54 --iter->second.web_view_count; 55 return; 56 } 57 webview_partition_id_map_.erase(guest_process_id); 58} 59 60bool WebViewRendererState::GetInfo(int guest_process_id, 61 int guest_routing_id, 62 WebViewInfo* webview_info) { 63 DCHECK_CURRENTLY_ON(BrowserThread::IO); 64 RenderId render_id(guest_process_id, guest_routing_id); 65 WebViewInfoMap::iterator iter = webview_info_map_.find(render_id); 66 if (iter != webview_info_map_.end()) { 67 *webview_info = iter->second; 68 return true; 69 } 70 return false; 71} 72 73bool WebViewRendererState::GetPartitionID(int guest_process_id, 74 std::string* partition_id) { 75 DCHECK_CURRENTLY_ON(BrowserThread::IO); 76 WebViewPartitionIDMap::iterator iter = 77 webview_partition_id_map_.find(guest_process_id); 78 if (iter != webview_partition_id_map_.end()) { 79 *partition_id = iter->second.partition_id; 80 return true; 81 } 82 return false; 83} 84 85} // namespace extensions 86