Chromium Code Reviews| 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" |
| 11 #include "chrome/browser/guest_view/guest_view_manager_factory.h" | 11 #include "chrome/browser/guest_view/guest_view_manager_factory.h" |
| 12 #include "chrome/browser/guest_view/web_view/web_view_guest.h" | 12 #include "chrome/browser/guest_view/web_view/web_view_guest.h" |
| 13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
| 14 #include "content/public/browser/browser_context.h" | 14 #include "content/public/browser/browser_context.h" |
| 15 #include "content/public/browser/render_process_host.h" | 15 #include "content/public/browser/render_process_host.h" |
| 16 #include "content/public/browser/user_metrics.h" | 16 #include "content/public/browser/user_metrics.h" |
| 17 #include "content/public/browser/web_contents_observer.h" | 17 #include "content/public/browser/web_contents_observer.h" |
| 18 #include "content/public/common/result_codes.h" | 18 #include "content/public/common/result_codes.h" |
| 19 #include "content/public/common/url_constants.h" | 19 #include "content/public/common/url_constants.h" |
| 20 #include "extensions/browser/extension_system.h" | 20 #include "extensions/browser/extension_system.h" |
| 21 #include "net/base/escape.h" | 21 #include "net/base/escape.h" |
| 22 #include "net/base/url_util.h" | |
| 22 #include "url/gurl.h" | 23 #include "url/gurl.h" |
| 23 | 24 |
| 24 using content::BrowserContext; | 25 using content::BrowserContext; |
| 25 using content::SiteInstance; | 26 using content::SiteInstance; |
| 26 using content::WebContents; | 27 using content::WebContents; |
| 27 | 28 |
| 28 // static | 29 // static |
| 29 GuestViewManagerFactory* GuestViewManager::factory_ = NULL; | 30 GuestViewManagerFactory* GuestViewManager::factory_ = NULL; |
| 30 | 31 |
| 31 GuestViewManager::GuestViewManager(content::BrowserContext* context) | 32 GuestViewManager::GuestViewManager(content::BrowserContext* context) |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 113 // If we kill the embedder, then don't bother calling back. | 114 // If we kill the embedder, then don't bother calling back. |
| 114 return; | 115 return; |
| 115 } | 116 } |
| 116 content::WebContents* guest_web_contents = | 117 content::WebContents* guest_web_contents = |
| 117 GetGuestByInstanceID(guest_instance_id); | 118 GetGuestByInstanceID(guest_instance_id); |
| 118 callback.Run(guest_web_contents); | 119 callback.Run(guest_web_contents); |
| 119 } | 120 } |
| 120 | 121 |
| 121 SiteInstance* GuestViewManager::GetGuestSiteInstance( | 122 SiteInstance* GuestViewManager::GetGuestSiteInstance( |
| 122 const GURL& guest_site) { | 123 const GURL& guest_site) { |
| 124 std::string mime_type_param; | |
| 125 bool has_mime_type_param = net::GetValueForKeyInQuery(guest_site, | |
|
Fady Samuel
2014/07/22 10:59:49
I don't understand this change. Why not simply hav
lazyboy
2014/07/22 20:32:56
I've changed it to have mime type directly in the
| |
| 126 guestview::kMimeTypePara m, | |
| 127 &mime_type_param); | |
| 123 for (GuestInstanceMap::const_iterator it = | 128 for (GuestInstanceMap::const_iterator it = |
| 124 guest_web_contents_by_instance_id_.begin(); | 129 guest_web_contents_by_instance_id_.begin(); |
| 125 it != guest_web_contents_by_instance_id_.end(); ++it) { | 130 it != guest_web_contents_by_instance_id_.end(); ++it) { |
| 126 if (it->second->GetSiteInstance()->GetSiteURL() == guest_site) | 131 |
| 132 bool guest_found = | |
| 133 it->second->GetSiteInstance()->GetSiteURL() == guest_site; | |
| 134 | |
| 135 if (!guest_found && has_mime_type_param) { | |
| 136 std::string iter_mime_type_param; | |
| 137 bool iter_has_mime_type_param = | |
| 138 net::GetValueForKeyInQuery(it->second->GetSiteInstance()->GetSiteURL() , | |
| 139 guestview::kMimeTypeParam, | |
| 140 &iter_mime_type_param); | |
| 141 if (iter_has_mime_type_param && iter_mime_type_param == mime_type_param) { | |
| 142 // If we have a mimeType param specified in the Site URL, we will re-use | |
| 143 // guests that has same mimeType. | |
| 144 guest_found = true; | |
| 145 } | |
| 146 } | |
| 147 | |
| 148 if (guest_found) | |
| 127 return it->second->GetSiteInstance(); | 149 return it->second->GetSiteInstance(); |
| 128 } | 150 } |
| 129 return NULL; | 151 return NULL; |
| 130 } | 152 } |
| 131 | 153 |
| 132 bool GuestViewManager::ForEachGuest(WebContents* embedder_web_contents, | 154 bool GuestViewManager::ForEachGuest(WebContents* embedder_web_contents, |
| 133 const GuestCallback& callback) { | 155 const GuestCallback& callback) { |
| 134 for (GuestInstanceMap::iterator it = | 156 for (GuestInstanceMap::iterator it = |
| 135 guest_web_contents_by_instance_id_.begin(); | 157 guest_web_contents_by_instance_id_.begin(); |
| 136 it != guest_web_contents_by_instance_id_.end(); ++it) { | 158 it != guest_web_contents_by_instance_id_.end(); ++it) { |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 235 guest_web_contents_by_instance_id_.find(guest_instance_id); | 257 guest_web_contents_by_instance_id_.find(guest_instance_id); |
| 236 if (it == guest_web_contents_by_instance_id_.end()) | 258 if (it == guest_web_contents_by_instance_id_.end()) |
| 237 return true; | 259 return true; |
| 238 | 260 |
| 239 GuestViewBase* guest_view = GuestViewBase::FromWebContents(it->second); | 261 GuestViewBase* guest_view = GuestViewBase::FromWebContents(it->second); |
| 240 if (!guest_view) | 262 if (!guest_view) |
| 241 return false; | 263 return false; |
| 242 | 264 |
| 243 return embedder_render_process_id == guest_view->embedder_render_process_id(); | 265 return embedder_render_process_id == guest_view->embedder_render_process_id(); |
| 244 } | 266 } |
| OLD | NEW |