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.
5 #include "content/public/browser/browser_thread.h"
6 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
8 using content::BrowserThread
;
10 namespace extensions
{
12 WebViewRendererState::WebViewInfo::WebViewInfo() {
15 WebViewRendererState::WebViewInfo::~WebViewInfo() {
19 WebViewRendererState
* WebViewRendererState::GetInstance() {
20 return Singleton
<WebViewRendererState
>::get();
23 WebViewRendererState::WebViewRendererState() {
26 WebViewRendererState::~WebViewRendererState() {
29 bool WebViewRendererState::IsGuest(int render_process_id
) {
30 DCHECK_CURRENTLY_ON(BrowserThread::IO
);
31 return web_view_partition_id_map_
.find(render_process_id
) !=
32 web_view_partition_id_map_
.end();
35 void WebViewRendererState::AddGuest(int guest_process_id
,
37 const WebViewInfo
& web_view_info
) {
38 DCHECK_CURRENTLY_ON(BrowserThread::IO
);
39 RenderId
render_id(guest_process_id
, guest_routing_id
);
41 web_view_info_map_
.find(render_id
) != web_view_info_map_
.end();
42 web_view_info_map_
[render_id
] = web_view_info
;
46 auto iter
= web_view_partition_id_map_
.find(guest_process_id
);
47 if (iter
!= web_view_partition_id_map_
.end()) {
48 ++iter
->second
.web_view_count
;
51 WebViewPartitionInfo
partition_info(1, web_view_info
.partition_id
);
52 web_view_partition_id_map_
[guest_process_id
] = partition_info
;
55 void WebViewRendererState::RemoveGuest(int guest_process_id
,
56 int guest_routing_id
) {
57 DCHECK_CURRENTLY_ON(BrowserThread::IO
);
58 RenderId
render_id(guest_process_id
, guest_routing_id
);
59 web_view_info_map_
.erase(render_id
);
60 auto iter
= web_view_partition_id_map_
.find(guest_process_id
);
61 if (iter
!= web_view_partition_id_map_
.end() &&
62 iter
->second
.web_view_count
> 1) {
63 --iter
->second
.web_view_count
;
66 web_view_partition_id_map_
.erase(guest_process_id
);
69 bool WebViewRendererState::GetInfo(int guest_process_id
,
71 WebViewInfo
* web_view_info
) {
72 DCHECK_CURRENTLY_ON(BrowserThread::IO
);
73 RenderId
render_id(guest_process_id
, guest_routing_id
);
74 auto iter
= web_view_info_map_
.find(render_id
);
75 if (iter
!= web_view_info_map_
.end()) {
76 *web_view_info
= iter
->second
;
82 bool WebViewRendererState::GetOwnerInfo(int guest_process_id
,
83 int* owner_process_id
,
84 std::string
* owner_host
) const {
85 DCHECK_CURRENTLY_ON(BrowserThread::IO
);
86 // TODO(fsamuel): Store per-process info in WebViewPartitionInfo instead of in
88 for (const auto& info
: web_view_info_map_
) {
89 if (info
.first
.first
== guest_process_id
) {
91 *owner_process_id
= info
.second
.embedder_process_id
;
93 *owner_host
= info
.second
.owner_host
;
100 bool WebViewRendererState::GetPartitionID(int guest_process_id
,
101 std::string
* partition_id
) {
102 DCHECK_CURRENTLY_ON(BrowserThread::IO
);
104 auto iter
= web_view_partition_id_map_
.find(guest_process_id
);
105 if (iter
!= web_view_partition_id_map_
.end()){
106 *partition_id
= iter
->second
.partition_id
;
112 void WebViewRendererState::AddContentScriptIDs(
113 int embedder_process_id
,
114 int view_instance_id
,
115 const std::set
<int>& script_ids
) {
116 DCHECK_CURRENTLY_ON(BrowserThread::IO
);
118 for (auto& render_id_info
: web_view_info_map_
) {
119 WebViewInfo
& info
= render_id_info
.second
;
120 if (info
.embedder_process_id
== embedder_process_id
&&
121 info
.instance_id
== view_instance_id
) {
122 for (int id
: script_ids
)
123 info
.content_script_ids
.insert(id
);
129 void WebViewRendererState::RemoveContentScriptIDs(
130 int embedder_process_id
,
131 int view_instance_id
,
132 const std::set
<int>& script_ids
) {
133 DCHECK_CURRENTLY_ON(BrowserThread::IO
);
135 for (auto& render_id_info
: web_view_info_map_
) {
136 WebViewInfo
& info
= render_id_info
.second
;
137 if (info
.embedder_process_id
== embedder_process_id
&&
138 info
.instance_id
== view_instance_id
) {
139 for (int id
: script_ids
)
140 info
.content_script_ids
.erase(id
);
146 } // namespace extensions