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

Side by Side Diff: chrome/renderer/external_extension.cc

Issue 2177123003: Move SearchProvider implementation into Blink and make it a no-op. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 4 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 (c) 2012 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 "chrome/renderer/external_extension.h"
6
7 #include <stdint.h>
8
9 #include "base/macros.h"
10 #include "chrome/common/search_provider.mojom.h"
11 #include "content/public/renderer/render_thread.h"
12 #include "services/shell/public/cpp/interface_provider.h"
13 #include "third_party/WebKit/public/web/WebDocument.h"
14 #include "third_party/WebKit/public/web/WebLocalFrame.h"
15 #include "v8/include/v8.h"
16
17 using blink::WebLocalFrame;
18 using blink::WebView;
19
20 namespace extensions_v8 {
21
22 namespace {
23
24 const char* const kSearchProviderApi =
25 "var external;"
26 "if (!external)"
27 " external = {};"
28 "external.IsSearchProviderInstalled = function(name) {"
29 " native function NativeIsSearchProviderInstalled();"
30 " return NativeIsSearchProviderInstalled(name);"
31 "};";
32
33 const char kExternalExtensionName[] = "v8/External";
34
35 } // namespace
36
37 class ExternalExtensionWrapper : public v8::Extension {
38 public:
39 ExternalExtensionWrapper();
40
41 // Allows v8's javascript code to call the native functions defined
42 // in this class for window.external.
43 v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate(
44 v8::Isolate* isolate,
45 v8::Local<v8::String> name) override;
46
47 // Implementation of window.external.IsSearchProviderInstalled.
48 static void IsSearchProviderInstalled(
49 const v8::FunctionCallbackInfo<v8::Value>& args);
50
51 private:
52 DISALLOW_COPY_AND_ASSIGN(ExternalExtensionWrapper);
53 };
54
55 ExternalExtensionWrapper::ExternalExtensionWrapper()
56 : v8::Extension(kExternalExtensionName, kSearchProviderApi) {
57 }
58
59 v8::Local<v8::FunctionTemplate>
60 ExternalExtensionWrapper::GetNativeFunctionTemplate(
61 v8::Isolate* isolate,
62 v8::Local<v8::String> name) {
63 if (name->Equals(v8::String::NewFromUtf8(
64 isolate, "NativeIsSearchProviderInstalled"))) {
65 return v8::FunctionTemplate::New(isolate, IsSearchProviderInstalled);
66 }
67
68 return v8::Local<v8::FunctionTemplate>();
69 }
70
71 // static
72 void ExternalExtensionWrapper::IsSearchProviderInstalled(
73 const v8::FunctionCallbackInfo<v8::Value>& args) {
74 if (!args.Length() || !args[0]->IsString())
75 return;
76
77 v8::String::Utf8Value utf8name(args[0]);
78 if (!utf8name.length())
79 return;
80
81 std::string name(*utf8name);
82
83 WebLocalFrame* webframe = WebLocalFrame::frameForCurrentContext();
84 if (!webframe)
85 return;
86
87 chrome::mojom::InstallState install = chrome::mojom::InstallState::DENIED;
88 GURL inquiry_url = GURL(webframe->document().url()).Resolve(name);
89 if (!inquiry_url.is_empty()) {
90 webframe->didCallIsSearchProviderInstalled();
91 chrome::mojom::SearchProviderInstallStatePtr search_provider_service;
92 content::RenderThread::Get()->GetRemoteInterfaces()->GetInterface(
93 mojo::GetProxy(&search_provider_service));
94 if (!search_provider_service->GetInstallState(webframe->document().url(),
95 inquiry_url, &install)) {
96 DLOG(ERROR) << "Can't fetch search provider install state";
97 }
98 }
99
100 if (install == chrome::mojom::InstallState::DENIED) {
101 // FIXME: throw access denied exception.
102 v8::Isolate* isolate = args.GetIsolate();
103 isolate->ThrowException(v8::Exception::Error(v8::String::Empty(isolate)));
104 return;
105 }
106 args.GetReturnValue().Set(static_cast<int32_t>(install));
107 }
108
109 v8::Extension* ExternalExtension::Get() {
110 return new ExternalExtensionWrapper();
111 }
112
113 } // namespace extensions_v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698