Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(772)

Side by Side Diff: chrome/browser/guest_view/guest_view_manager.cc

Issue 264943006: BrowserPlugin: Simplify content/public API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@guestview_manager_v1
Patch Set: Addressed Istiaque's comments Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/guest_view/guest_view_manager.h" 5 #include "chrome/browser/guest_view/guest_view_manager.h"
6 6
7 #include "chrome/browser/extensions/extension_service.h" 7 #include "chrome/browser/extensions/extension_service.h"
8 #include "chrome/browser/guest_view/guest_view_base.h" 8 #include "chrome/browser/guest_view/guest_view_base.h"
9 #include "chrome/browser/guest_view/guest_view_constants.h" 9 #include "chrome/browser/guest_view/guest_view_constants.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 GuestViewManager* guest_manager = 68 GuestViewManager* guest_manager =
69 static_cast<GuestViewManager*>(context->GetUserData( 69 static_cast<GuestViewManager*>(context->GetUserData(
70 guestview::kGuestViewManagerKeyName)); 70 guestview::kGuestViewManagerKeyName));
71 if (!guest_manager) { 71 if (!guest_manager) {
72 guest_manager = new GuestViewManager(context); 72 guest_manager = new GuestViewManager(context);
73 context->SetUserData(guestview::kGuestViewManagerKeyName, guest_manager); 73 context->SetUserData(guestview::kGuestViewManagerKeyName, guest_manager);
74 } 74 }
75 return guest_manager; 75 return guest_manager;
76 } 76 }
77 77
78 content::WebContents* GuestViewManager::GetGuestByInstanceIDSafely(
79 int guest_instance_id,
80 int embedder_render_process_id) {
81 if (!CanEmbedderAccessInstanceIDMaybeKill(embedder_render_process_id,
82 guest_instance_id)) {
83 return NULL;
84 }
85 return GetGuestByInstanceID(guest_instance_id, embedder_render_process_id);
86 }
87
78 int GuestViewManager::GetNextInstanceID() { 88 int GuestViewManager::GetNextInstanceID() {
79 return ++current_instance_id_; 89 return ++current_instance_id_;
80 } 90 }
81 91
82 void GuestViewManager::AddGuest(int guest_instance_id, 92 void GuestViewManager::AddGuest(int guest_instance_id,
83 WebContents* guest_web_contents) { 93 WebContents* guest_web_contents) {
84 DCHECK(guest_web_contents_by_instance_id_.find(guest_instance_id) == 94 DCHECK(guest_web_contents_by_instance_id_.find(guest_instance_id) ==
85 guest_web_contents_by_instance_id_.end()); 95 guest_web_contents_by_instance_id_.end());
86 guest_web_contents_by_instance_id_[guest_instance_id] = guest_web_contents; 96 guest_web_contents_by_instance_id_[guest_instance_id] = guest_web_contents;
87 // This will add the RenderProcessHost ID when we get one. 97 // This will add the RenderProcessHost ID when we get one.
88 new GuestWebContentsObserver(guest_web_contents); 98 new GuestWebContentsObserver(guest_web_contents);
89 } 99 }
90 100
91 void GuestViewManager::RemoveGuest(int guest_instance_id) { 101 void GuestViewManager::RemoveGuest(int guest_instance_id) {
92 GuestInstanceMap::iterator it = 102 GuestInstanceMap::iterator it =
93 guest_web_contents_by_instance_id_.find(guest_instance_id); 103 guest_web_contents_by_instance_id_.find(guest_instance_id);
94 DCHECK(it != guest_web_contents_by_instance_id_.end()); 104 DCHECK(it != guest_web_contents_by_instance_id_.end());
95 render_process_host_id_multiset_.erase( 105 render_process_host_id_multiset_.erase(
96 it->second->GetRenderProcessHost()->GetID()); 106 it->second->GetRenderProcessHost()->GetID());
97 guest_web_contents_by_instance_id_.erase(it); 107 guest_web_contents_by_instance_id_.erase(it);
98 } 108 }
99 109
110 void GuestViewManager::MaybeGetGuestByInstanceIDOrKill(
111 int guest_instance_id,
112 int embedder_render_process_id,
113 const GuestByInstanceIDCallback& callback) {
114 if (!CanEmbedderAccessInstanceIDMaybeKill(embedder_render_process_id,
115 guest_instance_id)) {
116 // If we kill the embedder, then don't bother calling back.
117 return;
118 }
119 content::WebContents* guest_web_contents =
120 GetGuestByInstanceID(guest_instance_id, embedder_render_process_id);
121 callback.Run(guest_web_contents);
122 }
123
124 SiteInstance* GuestViewManager::GetGuestSiteInstance(
125 const GURL& guest_site) {
126 for (GuestInstanceMap::const_iterator it =
127 guest_web_contents_by_instance_id_.begin();
128 it != guest_web_contents_by_instance_id_.end(); ++it) {
129 if (it->second->GetSiteInstance()->GetSiteURL() == guest_site)
130 return it->second->GetSiteInstance();
131 }
132 return NULL;
133 }
134
135 bool GuestViewManager::ForEachGuest(WebContents* embedder_web_contents,
136 const GuestCallback& callback) {
137 for (GuestInstanceMap::iterator it =
138 guest_web_contents_by_instance_id_.begin();
139 it != guest_web_contents_by_instance_id_.end(); ++it) {
140 WebContents* guest = it->second;
141 if (embedder_web_contents != guest->GetEmbedderWebContents())
142 continue;
143
144 if (callback.Run(guest))
145 return true;
146 }
147 return false;
148 }
149
150 void GuestViewManager::AddRenderProcessHostID(int render_process_host_id) {
lazyboy 2014/05/06 18:03:54 nit: try to match declaration and definition order
Fady Samuel 2014/05/06 18:13:03 It is. AddRenderProcessHostID (which is private) i
lazyboy 2014/05/06 18:16:54 Oh sorry, I got confused with the other GetGuest*
151 render_process_host_id_multiset_.insert(render_process_host_id);
152 }
153
100 content::WebContents* GuestViewManager::GetGuestByInstanceID( 154 content::WebContents* GuestViewManager::GetGuestByInstanceID(
101 int guest_instance_id, 155 int guest_instance_id,
102 int embedder_render_process_id) { 156 int embedder_render_process_id) {
103 if (!CanEmbedderAccessInstanceIDMaybeKill(embedder_render_process_id,
104 guest_instance_id)) {
105 return NULL;
106 }
107 GuestInstanceMap::const_iterator it = 157 GuestInstanceMap::const_iterator it =
108 guest_web_contents_by_instance_id_.find(guest_instance_id); 158 guest_web_contents_by_instance_id_.find(guest_instance_id);
109 if (it == guest_web_contents_by_instance_id_.end()) 159 if (it == guest_web_contents_by_instance_id_.end())
110 return NULL; 160 return NULL;
111 return it->second; 161 return it->second;
112 } 162 }
113 163
114 bool GuestViewManager::CanEmbedderAccessInstanceIDMaybeKill( 164 bool GuestViewManager::CanEmbedderAccessInstanceIDMaybeKill(
115 int embedder_render_process_id, 165 int embedder_render_process_id,
116 int guest_instance_id) { 166 int guest_instance_id) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 if (it == guest_web_contents_by_instance_id_.end()) 198 if (it == guest_web_contents_by_instance_id_.end())
149 return true; 199 return true;
150 200
151 GuestViewBase* guest_view = GuestViewBase::FromWebContents(it->second); 201 GuestViewBase* guest_view = GuestViewBase::FromWebContents(it->second);
152 if (!guest_view) 202 if (!guest_view)
153 return false; 203 return false;
154 204
155 return CanEmbedderAccessGuest(embedder_render_process_id, guest_view); 205 return CanEmbedderAccessGuest(embedder_render_process_id, guest_view);
156 } 206 }
157 207
158 SiteInstance* GuestViewManager::GetGuestSiteInstance(
159 const GURL& guest_site) {
160 for (GuestInstanceMap::const_iterator it =
161 guest_web_contents_by_instance_id_.begin();
162 it != guest_web_contents_by_instance_id_.end(); ++it) {
163 if (it->second->GetSiteInstance()->GetSiteURL() == guest_site)
164 return it->second->GetSiteInstance();
165 }
166 return NULL;
167 }
168
169 bool GuestViewManager::ForEachGuest(WebContents* embedder_web_contents,
170 const GuestCallback& callback) {
171 for (GuestInstanceMap::iterator it =
172 guest_web_contents_by_instance_id_.begin();
173 it != guest_web_contents_by_instance_id_.end(); ++it) {
174 WebContents* guest = it->second;
175 if (embedder_web_contents != guest->GetEmbedderWebContents())
176 continue;
177
178 if (callback.Run(guest))
179 return true;
180 }
181 return false;
182 }
183
184 void GuestViewManager::AddRenderProcessHostID(int render_process_host_id) {
185 render_process_host_id_multiset_.insert(render_process_host_id);
186 }
187
188 bool GuestViewManager::CanEmbedderAccessGuest(int embedder_render_process_id, 208 bool GuestViewManager::CanEmbedderAccessGuest(int embedder_render_process_id,
189 GuestViewBase* guest) { 209 GuestViewBase* guest) {
190 // The embedder can access the guest if it has not been attached and its 210 // The embedder can access the guest if it has not been attached and its
191 // opener's embedder lives in the same process as the given embedder. 211 // opener's embedder lives in the same process as the given embedder.
192 if (!guest->attached()) { 212 if (!guest->attached()) {
193 if (!guest->GetOpener()) 213 if (!guest->GetOpener())
194 return false; 214 return false;
195 215
196 return embedder_render_process_id == 216 return embedder_render_process_id ==
197 guest->GetOpener()->GetEmbedderWebContents()->GetRenderProcessHost()-> 217 guest->GetOpener()->GetEmbedderWebContents()->GetRenderProcessHost()->
198 GetID(); 218 GetID();
199 } 219 }
200 220
201 return embedder_render_process_id == 221 return embedder_render_process_id ==
202 guest->embedder_web_contents()->GetRenderProcessHost()->GetID(); 222 guest->embedder_web_contents()->GetRenderProcessHost()->GetID();
203 } 223 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698