OLD | NEW |
---|---|
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 "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "chrome/browser/extensions/extension_service.h" | 8 #include "chrome/browser/extensions/extension_service.h" |
9 #include "chrome/browser/guest_view/guest_view_base.h" | 9 #include "chrome/browser/guest_view/guest_view_base.h" |
10 #include "chrome/browser/guest_view/guest_view_constants.h" | 10 #include "chrome/browser/guest_view/guest_view_constants.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
53 | 53 |
54 virtual void WebContentsDestroyed() OVERRIDE { | 54 virtual void WebContentsDestroyed() OVERRIDE { |
55 delete this; | 55 delete this; |
56 } | 56 } |
57 | 57 |
58 private: | 58 private: |
59 DISALLOW_COPY_AND_ASSIGN(GuestWebContentsObserver); | 59 DISALLOW_COPY_AND_ASSIGN(GuestWebContentsObserver); |
60 }; | 60 }; |
61 | 61 |
62 GuestViewManager::GuestViewManager(content::BrowserContext* context) | 62 GuestViewManager::GuestViewManager(content::BrowserContext* context) |
63 : current_instance_id_(0), | 63 : current_instance_id_(0), last_instance_id_removed_(0), context_(context) { |
64 context_(context) {} | 64 } |
65 | 65 |
66 GuestViewManager::~GuestViewManager() {} | 66 GuestViewManager::~GuestViewManager() {} |
67 | 67 |
68 // static. | 68 // static. |
69 GuestViewManager* GuestViewManager::FromBrowserContext( | 69 GuestViewManager* GuestViewManager::FromBrowserContext( |
70 BrowserContext* context) { | 70 BrowserContext* context) { |
71 GuestViewManager* guest_manager = | 71 GuestViewManager* guest_manager = |
72 static_cast<GuestViewManager*>(context->GetUserData( | 72 static_cast<GuestViewManager*>(context->GetUserData( |
73 guestview::kGuestViewManagerKeyName)); | 73 guestview::kGuestViewManagerKeyName)); |
74 if (!guest_manager) { | 74 if (!guest_manager) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
181 GuestViewBase* guest_view = GuestViewBase::FromWebContents(guest); | 181 GuestViewBase* guest_view = GuestViewBase::FromWebContents(guest); |
182 if (embedder_web_contents != guest_view->embedder_web_contents()) | 182 if (embedder_web_contents != guest_view->embedder_web_contents()) |
183 continue; | 183 continue; |
184 | 184 |
185 if (callback.Run(guest)) | 185 if (callback.Run(guest)) |
186 return true; | 186 return true; |
187 } | 187 } |
188 return false; | 188 return false; |
189 } | 189 } |
190 | 190 |
191 void GuestViewManager::AddGuest(int guest_instance_id, | 191 bool GuestViewManager::AddGuest(int guest_instance_id, |
192 WebContents* guest_web_contents) { | 192 WebContents* guest_web_contents) { |
193 DCHECK(guest_web_contents_by_instance_id_.find(guest_instance_id) == | 193 DCHECK(guest_web_contents_by_instance_id_.find(guest_instance_id) == |
194 guest_web_contents_by_instance_id_.end()); | 194 guest_web_contents_by_instance_id_.end()); |
Fady Samuel
2014/05/22 15:02:13
Make this a CHECK instead of a DCHECK because it h
lazyboy
2014/05/22 15:59:31
Done.
| |
195 guest_web_contents_by_instance_id_[guest_instance_id] = guest_web_contents; | 195 guest_web_contents_by_instance_id_[guest_instance_id] = guest_web_contents; |
196 // This will add the RenderProcessHost ID when we get one. | 196 // This will add the RenderProcessHost ID when we get one. |
197 new GuestWebContentsObserver(guest_web_contents); | 197 new GuestWebContentsObserver(guest_web_contents); |
198 return true; | |
198 } | 199 } |
199 | 200 |
200 void GuestViewManager::RemoveGuest(int guest_instance_id) { | 201 void GuestViewManager::RemoveGuest(int guest_instance_id) { |
201 GuestInstanceMap::iterator it = | 202 GuestInstanceMap::iterator it = |
202 guest_web_contents_by_instance_id_.find(guest_instance_id); | 203 guest_web_contents_by_instance_id_.find(guest_instance_id); |
203 DCHECK(it != guest_web_contents_by_instance_id_.end()); | 204 DCHECK(it != guest_web_contents_by_instance_id_.end()); |
204 render_process_host_id_multiset_.erase( | 205 render_process_host_id_multiset_.erase( |
205 it->second->GetRenderProcessHost()->GetID()); | 206 it->second->GetRenderProcessHost()->GetID()); |
206 guest_web_contents_by_instance_id_.erase(it); | 207 guest_web_contents_by_instance_id_.erase(it); |
208 | |
209 if (guest_instance_id == last_instance_id_removed_ + 1) { | |
Fady Samuel
2014/05/22 15:02:13
This code is hard to read. Could you please commen
lazyboy
2014/05/22 15:59:31
There's a note in last_instance_id_removed_ in .h
| |
210 ++last_instance_id_removed_; | |
211 // Compact. | |
212 std::set<int>::iterator iter = removed_instance_ids_.begin(); | |
213 while (iter != removed_instance_ids_.end()) { | |
214 int instance_id = *iter; | |
215 if (instance_id != last_instance_id_removed_ + 1) | |
216 break; | |
217 ++last_instance_id_removed_; | |
218 removed_instance_ids_.erase(iter++); | |
219 } | |
220 } else { | |
221 removed_instance_ids_.insert(guest_instance_id); | |
222 } | |
207 } | 223 } |
208 | 224 |
209 void GuestViewManager::AddRenderProcessHostID(int render_process_host_id) { | 225 void GuestViewManager::AddRenderProcessHostID(int render_process_host_id) { |
210 render_process_host_id_multiset_.insert(render_process_host_id); | 226 render_process_host_id_multiset_.insert(render_process_host_id); |
211 } | 227 } |
212 | 228 |
213 content::WebContents* GuestViewManager::GetGuestByInstanceID( | 229 content::WebContents* GuestViewManager::GetGuestByInstanceID( |
214 int guest_instance_id, | 230 int guest_instance_id, |
215 int embedder_render_process_id) { | 231 int embedder_render_process_id) { |
216 GuestInstanceMap::const_iterator it = | 232 GuestInstanceMap::const_iterator it = |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
273 return false; | 289 return false; |
274 | 290 |
275 return embedder_render_process_id == | 291 return embedder_render_process_id == |
276 guest->GetOpener()->embedder_web_contents()->GetRenderProcessHost()-> | 292 guest->GetOpener()->embedder_web_contents()->GetRenderProcessHost()-> |
277 GetID(); | 293 GetID(); |
278 } | 294 } |
279 | 295 |
280 return embedder_render_process_id == | 296 return embedder_render_process_id == |
281 guest->embedder_web_contents()->GetRenderProcessHost()->GetID(); | 297 guest->embedder_web_contents()->GetRenderProcessHost()->GetID(); |
282 } | 298 } |
OLD | NEW |