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

Side by Side Diff: extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc

Issue 554893002: [WORK_IN_PROGRESS] PDF::Save() fix for out-of-process-pdf. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: better fix for constrained windows Created 6 years, 3 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 "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h" 5 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h"
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "content/public/browser/browser_thread.h" 8 #include "content/public/browser/browser_thread.h"
9 #include "content/public/browser/render_process_host.h" 9 #include "content/public/browser/render_process_host.h"
10 #include "content/public/common/url_constants.h" 10 #include "content/public/common/url_constants.h"
11 #include "extensions/browser/api/extensions_api_client.h"
11 #include "extensions/browser/guest_view/guest_view_constants.h" 12 #include "extensions/browser/guest_view/guest_view_constants.h"
12 #include "extensions/browser/guest_view/guest_view_manager.h" 13 #include "extensions/browser/guest_view/guest_view_manager.h"
13 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h" 14 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h"
15 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t_delegate.h"
14 #include "extensions/common/feature_switch.h" 16 #include "extensions/common/feature_switch.h"
15 #include "extensions/strings/grit/extensions_strings.h" 17 #include "extensions/strings/grit/extensions_strings.h"
16 #include "net/base/url_util.h" 18 #include "net/base/url_util.h"
17 19
18 using content::WebContents; 20 using content::WebContents;
19 21
20 namespace extensions { 22 namespace extensions {
21 23
22 // static 24 // static
23 const char MimeHandlerViewGuest::Type[] = "mimehandler"; 25 const char MimeHandlerViewGuest::Type[] = "mimehandler";
24 26
25 // static 27 // static
26 GuestViewBase* MimeHandlerViewGuest::Create( 28 GuestViewBase* MimeHandlerViewGuest::Create(
27 content::BrowserContext* browser_context, 29 content::BrowserContext* browser_context,
28 int guest_instance_id) { 30 int guest_instance_id) {
29 if (!extensions::FeatureSwitch::mime_handler_view()->IsEnabled()) 31 if (!extensions::FeatureSwitch::mime_handler_view()->IsEnabled())
30 return NULL; 32 return NULL;
31 33
32 return new MimeHandlerViewGuest(browser_context, guest_instance_id); 34 return new MimeHandlerViewGuest(browser_context, guest_instance_id);
33 } 35 }
34 36
35 MimeHandlerViewGuest::MimeHandlerViewGuest( 37 MimeHandlerViewGuest::MimeHandlerViewGuest(
36 content::BrowserContext* browser_context, 38 content::BrowserContext* browser_context,
37 int guest_instance_id) 39 int guest_instance_id)
38 : GuestView<MimeHandlerViewGuest>(browser_context, guest_instance_id) { 40 : GuestView<MimeHandlerViewGuest>(browser_context, guest_instance_id),
41 delegate_(
42 ExtensionsAPIClient::Get()->CreateMimeHandlerViewGuestDelegate()) {
39 } 43 }
40 44
41 MimeHandlerViewGuest::~MimeHandlerViewGuest() { 45 MimeHandlerViewGuest::~MimeHandlerViewGuest() {
42 } 46 }
43 47
44 const char* MimeHandlerViewGuest::GetAPINamespace() const { 48 const char* MimeHandlerViewGuest::GetAPINamespace() const {
45 return "mimeHandlerViewGuestInternal"; 49 return "mimeHandlerViewGuestInternal";
46 } 50 }
47 51
48 int MimeHandlerViewGuest::GetTaskPrefix() const { 52 int MimeHandlerViewGuest::GetTaskPrefix() const {
49 return IDS_EXTENSION_TASK_MANAGER_MIMEHANDLERVIEW_TAG_PREFIX; 53 return IDS_EXTENSION_TASK_MANAGER_MIMEHANDLERVIEW_TAG_PREFIX;
50 } 54 }
51 55
52 void MimeHandlerViewGuest::CreateWebContents( 56 void MimeHandlerViewGuest::CreateWebContents(
53 const std::string& embedder_extension_id, 57 const std::string& embedder_extension_id,
54 int embedder_render_process_id, 58 int embedder_render_process_id,
55 const base::DictionaryValue& create_params, 59 const base::DictionaryValue& create_params,
56 const WebContentsCreatedCallback& callback) { 60 const WebContentsCreatedCallback& callback) {
57 std::string orig_mime_type; 61 std::string orig_mime_type;
58 DCHECK( 62 bool success =
59 create_params.GetString(mime_handler_view::kMimeType, &orig_mime_type) && 63 create_params.GetString(mime_handler_view::kMimeType, &orig_mime_type);
60 !orig_mime_type.empty()); 64 DCHECK(success && !orig_mime_type.empty());
61 std::string guest_site_str; 65 std::string guest_site_str;
62 // Note that we put a prefix "mime-" before the mime type so that this 66 // Note that we put a prefix "mime-" before the mime type so that this
63 // can never collide with an extension ID. 67 // can never collide with an extension ID.
64 guest_site_str = base::StringPrintf( 68 guest_site_str = base::StringPrintf(
65 "%s://mime-%s", content::kGuestScheme, orig_mime_type.c_str()); 69 "%s://mime-%s", content::kGuestScheme, orig_mime_type.c_str());
66 GURL guest_site(guest_site_str); 70 GURL guest_site(guest_site_str);
67 71
68 // If we already have a mime handler view for the same mime type, we should 72 // If we already have a mime handler view for the same mime type, we should
69 // use the same SiteInstance so they go under same process. 73 // use the same SiteInstance so they go under same process.
70 GuestViewManager* guest_view_manager = 74 GuestViewManager* guest_view_manager =
71 GuestViewManager::FromBrowserContext(browser_context()); 75 GuestViewManager::FromBrowserContext(browser_context());
72 content::SiteInstance* guest_site_instance = 76 content::SiteInstance* guest_site_instance =
73 guest_view_manager->GetGuestSiteInstance(guest_site); 77 guest_view_manager->GetGuestSiteInstance(guest_site);
74 if (!guest_site_instance) { 78 if (!guest_site_instance) {
75 // Create the SiteInstance in a new BrowsingInstance, which will ensure 79 // Create the SiteInstance in a new BrowsingInstance, which will ensure
76 // that guests from different render process are not allowed to send 80 // that guests from different render process are not allowed to send
77 // messages to each other. 81 // messages to each other.
78 guest_site_instance = 82 guest_site_instance =
79 content::SiteInstance::CreateForURL(browser_context(), guest_site); 83 content::SiteInstance::CreateForURL(browser_context(), guest_site);
80 } 84 }
81 WebContents::CreateParams params(browser_context(), guest_site_instance); 85 WebContents::CreateParams params(browser_context(), guest_site_instance);
82 params.guest_delegate = this; 86 params.guest_delegate = this;
83 callback.Run(WebContents::Create(params)); 87 callback.Run(WebContents::Create(params));
84 } 88 }
85 89
86 void MimeHandlerViewGuest::DidAttachToEmbedder() { 90 void MimeHandlerViewGuest::DidAttachToEmbedder() {
87 std::string src; 91 std::string src;
88 DCHECK(attach_params()->GetString(mime_handler_view::kSrc, &src) && 92 bool success = attach_params()->GetString(mime_handler_view::kSrc, &src);
89 !src.empty()); 93 DCHECK(success && !src.empty());
90 web_contents()->GetController().LoadURL( 94 web_contents()->GetController().LoadURL(
91 GURL(src), 95 GURL(src),
92 content::Referrer(), 96 content::Referrer(),
93 content::PAGE_TRANSITION_AUTO_TOPLEVEL, 97 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
94 std::string()); 98 std::string());
95 } 99 }
96 100
101 void MimeHandlerViewGuest::DidInitialize() {
102 if (delegate_)
103 delegate_->OnAttachHelpers(web_contents());
104 }
105
97 } // namespace extensions 106 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698