| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/browser_plugin/browser_plugin_guest.h" | 5 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 next_permission_request_id_(browser_plugin::kInvalidPermissionRequestID), | 214 next_permission_request_id_(browser_plugin::kInvalidPermissionRequestID), |
| 215 has_render_view_(has_render_view), | 215 has_render_view_(has_render_view), |
| 216 last_seen_auto_size_enabled_(false), | 216 last_seen_auto_size_enabled_(false), |
| 217 is_in_destruction_(false), | 217 is_in_destruction_(false), |
| 218 last_text_input_type_(ui::TEXT_INPUT_TYPE_NONE), | 218 last_text_input_type_(ui::TEXT_INPUT_TYPE_NONE), |
| 219 last_input_mode_(ui::TEXT_INPUT_MODE_DEFAULT), | 219 last_input_mode_(ui::TEXT_INPUT_MODE_DEFAULT), |
| 220 last_can_compose_inline_(true), | 220 last_can_compose_inline_(true), |
| 221 weak_ptr_factory_(this) { | 221 weak_ptr_factory_(this) { |
| 222 DCHECK(web_contents); | 222 DCHECK(web_contents); |
| 223 web_contents->SetDelegate(this); | 223 web_contents->SetDelegate(this); |
| 224 GetBrowserPluginGuestManager()->AddGuest(instance_id_, GetWebContents()); | |
| 225 } | 224 } |
| 226 | 225 |
| 227 bool BrowserPluginGuest::AddMessageToConsole(WebContents* source, | 226 bool BrowserPluginGuest::AddMessageToConsole(WebContents* source, |
| 228 int32 level, | 227 int32 level, |
| 229 const base::string16& message, | 228 const base::string16& message, |
| 230 int32 line_no, | 229 int32 line_no, |
| 231 const base::string16& source_id) { | 230 const base::string16& source_id) { |
| 232 if (!delegate_) | 231 if (!delegate_) |
| 233 return false; | 232 return false; |
| 234 | 233 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 const OpenURLParams& params) { | 308 const OpenURLParams& params) { |
| 310 BrowserPluginGuestManager* guest_manager = GetBrowserPluginGuestManager(); | 309 BrowserPluginGuestManager* guest_manager = GetBrowserPluginGuestManager(); |
| 311 | 310 |
| 312 // Allocate a new instance ID for the new guest. | 311 // Allocate a new instance ID for the new guest. |
| 313 int instance_id = guest_manager->GetNextInstanceID(); | 312 int instance_id = guest_manager->GetNextInstanceID(); |
| 314 | 313 |
| 315 // Set the attach params to use the same partition as the opener. | 314 // Set the attach params to use the same partition as the opener. |
| 316 // We pull the partition information from the site's URL, which is of the form | 315 // We pull the partition information from the site's URL, which is of the form |
| 317 // guest://site/{persist}?{partition_name}. | 316 // guest://site/{persist}?{partition_name}. |
| 318 const GURL& site_url = GetWebContents()->GetSiteInstance()->GetSiteURL(); | 317 const GURL& site_url = GetWebContents()->GetSiteInstance()->GetSiteURL(); |
| 319 BrowserPluginHostMsg_Attach_Params attach_params; | |
| 320 attach_params.storage_partition_id = site_url.query(); | |
| 321 attach_params.persist_storage = | |
| 322 site_url.path().find("persist") != std::string::npos; | |
| 323 | 318 |
| 324 // The new guest gets a copy of this guest's extra params so that the content | 319 // The new guest gets a copy of this guest's extra params so that the content |
| 325 // embedder exposes the same API for this guest as its opener. | 320 // embedder exposes the same API for this guest as its opener. |
| 326 scoped_ptr<base::DictionaryValue> extra_params( | 321 scoped_ptr<base::DictionaryValue> extra_params( |
| 327 extra_attach_params_->DeepCopy()); | 322 extra_attach_params_->DeepCopy()); |
| 323 const std::string& storage_partition_id = site_url.query(); |
| 324 bool persist_storage = |
| 325 site_url.path().find("persist") != std::string::npos; |
| 328 BrowserPluginGuest* new_guest = | 326 BrowserPluginGuest* new_guest = |
| 329 guest_manager->CreateGuest(GetWebContents()->GetSiteInstance(), | 327 guest_manager->CreateGuest(GetWebContents()->GetSiteInstance(), |
| 330 instance_id, | 328 instance_id, |
| 331 attach_params, | 329 storage_partition_id, |
| 330 persist_storage, |
| 332 extra_params.Pass()); | 331 extra_params.Pass()); |
| 333 if (new_guest->delegate_) | 332 if (new_guest->delegate_) |
| 334 new_guest->delegate_->SetOpener(GetWebContents()); | 333 new_guest->delegate_->SetOpener(GetWebContents()); |
| 335 | 334 |
| 336 // Take ownership of |new_guest|. | 335 // Take ownership of |new_guest|. |
| 337 pending_new_windows_.insert( | 336 pending_new_windows_.insert( |
| 338 std::make_pair(new_guest, NewWindowInfo(params.url, std::string()))); | 337 std::make_pair(new_guest, NewWindowInfo(params.url, std::string()))); |
| 339 | 338 |
| 340 // Request permission to show the new window. | 339 // Request permission to show the new window. |
| 341 RequestNewWindowPermission(params.disposition, gfx::Rect(), | 340 RequestNewWindowPermission(params.disposition, gfx::Rect(), |
| (...skipping 11 matching lines...) Expand all Loading... |
| 353 if (delegate_) | 352 if (delegate_) |
| 354 delegate_->EmbedderDestroyed(); | 353 delegate_->EmbedderDestroyed(); |
| 355 Destroy(); | 354 Destroy(); |
| 356 } | 355 } |
| 357 | 356 |
| 358 void BrowserPluginGuest::Destroy() { | 357 void BrowserPluginGuest::Destroy() { |
| 359 is_in_destruction_ = true; | 358 is_in_destruction_ = true; |
| 360 if (!attached() && GetOpener()) | 359 if (!attached() && GetOpener()) |
| 361 GetOpener()->pending_new_windows_.erase(this); | 360 GetOpener()->pending_new_windows_.erase(this); |
| 362 DestroyUnattachedWindows(); | 361 DestroyUnattachedWindows(); |
| 363 GetBrowserPluginGuestManager()->RemoveGuest(instance_id_); | |
| 364 delete GetWebContents(); | 362 delete GetWebContents(); |
| 365 } | 363 } |
| 366 | 364 |
| 367 bool BrowserPluginGuest::OnMessageReceivedFromEmbedder( | 365 bool BrowserPluginGuest::OnMessageReceivedFromEmbedder( |
| 368 const IPC::Message& message) { | 366 const IPC::Message& message) { |
| 369 bool handled = true; | 367 bool handled = true; |
| 370 IPC_BEGIN_MESSAGE_MAP(BrowserPluginGuest, message) | 368 IPC_BEGIN_MESSAGE_MAP(BrowserPluginGuest, message) |
| 371 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CompositorFrameSwappedACK, | 369 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CompositorFrameSwappedACK, |
| 372 OnCompositorFrameSwappedACK) | 370 OnCompositorFrameSwappedACK) |
| 373 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CopyFromCompositingSurfaceAck, | 371 IPC_MESSAGE_HANDLER(BrowserPluginHostMsg_CopyFromCompositingSurfaceAck, |
| (...skipping 1183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1557 const GURL& url) { | 1555 const GURL& url) { |
| 1558 if (!url.is_valid()) { | 1556 if (!url.is_valid()) { |
| 1559 callback.Run(false); | 1557 callback.Run(false); |
| 1560 return; | 1558 return; |
| 1561 } | 1559 } |
| 1562 | 1560 |
| 1563 delegate_->CanDownload(request_method, url, callback); | 1561 delegate_->CanDownload(request_method, url, callback); |
| 1564 } | 1562 } |
| 1565 | 1563 |
| 1566 } // namespace content | 1564 } // namespace content |
| OLD | NEW |