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

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

Issue 376033002: Adding MimeHandlerView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pending-zork-patch2
Patch Set: Address comment from kenrb@ 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h"
6
7 #include "base/strings/stringprintf.h"
8 #include "content/public/browser/browser_thread.h"
9 #include "content/public/browser/render_process_host.h"
10 #include "content/public/common/url_constants.h"
11 #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/mime_handler_view/mime_handler_view_cons tants.h"
14 #include "extensions/common/feature_switch.h"
15 #include "extensions/strings/grit/extensions_strings.h"
16 #include "net/base/url_util.h"
17
18 using content::WebContents;
19
20 namespace extensions {
21
22 // static
23 const char MimeHandlerViewGuest::Type[] = "mimehandler";
24
25 // static
26 GuestViewBase* MimeHandlerViewGuest::Create(
27 content::BrowserContext* browser_context,
28 int guest_instance_id) {
29 if (!extensions::FeatureSwitch::mime_handler_view()->IsEnabled())
30 return NULL;
31
32 return new MimeHandlerViewGuest(browser_context, guest_instance_id);
33 }
34
35 MimeHandlerViewGuest::MimeHandlerViewGuest(
36 content::BrowserContext* browser_context,
37 int guest_instance_id)
38 : GuestView<MimeHandlerViewGuest>(browser_context, guest_instance_id) {
39 }
40
41 MimeHandlerViewGuest::~MimeHandlerViewGuest() {
42 }
43
44 const char* MimeHandlerViewGuest::GetAPINamespace() const {
45 return "mimeHandlerViewGuestInternal";
46 }
47
48 int MimeHandlerViewGuest::GetTaskPrefix() const {
49 return IDS_EXTENSION_TASK_MANAGER_MIMEHANDLERVIEW_TAG_PREFIX;
50 }
51
52 void MimeHandlerViewGuest::CreateWebContents(
53 const std::string& embedder_extension_id,
54 int embedder_render_process_id,
55 const base::DictionaryValue& create_params,
56 const WebContentsCreatedCallback& callback) {
57 std::string orig_mime_type;
58 DCHECK(
59 create_params.GetString(mime_handler_view::kMimeType, &orig_mime_type) &&
60 !orig_mime_type.empty());
61 std::string guest_site_str;
62 // Note that we put a prefix "mime-" before the mime type so that this
63 // can never collide with an extension ID.
64 guest_site_str = base::StringPrintf(
65 "%s://mime-%s", content::kGuestScheme, orig_mime_type.c_str());
66 GURL guest_site(guest_site_str);
67
68 // 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.
70 GuestViewManager* guest_view_manager =
71 GuestViewManager::FromBrowserContext(browser_context());
72 content::SiteInstance* guest_site_instance =
73 guest_view_manager->GetGuestSiteInstance(guest_site);
74 if (!guest_site_instance) {
75 // Create the SiteInstance in a new BrowsingInstance, which will ensure
76 // that guests from different render process are not allowed to send
77 // messages to each other.
78 guest_site_instance =
79 content::SiteInstance::CreateForURL(browser_context(), guest_site);
80 }
81 WebContents::CreateParams params(browser_context(), guest_site_instance);
82 params.guest_delegate = this;
83 callback.Run(WebContents::Create(params));
84 }
85
86 void MimeHandlerViewGuest::DidAttachToEmbedder() {
87 std::string src;
88 DCHECK(attach_params()->GetString(mime_handler_view::kSrc, &src) &&
89 !src.empty());
90 web_contents()->GetController().LoadURL(
91 GURL(src),
92 content::Referrer(),
93 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
94 std::string());
95 }
96
97 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698