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

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

Issue 8486025: Remove the ability to set the default search engine from JS. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix build Created 9 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/renderer/external_extension_uitest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/renderer/external_extension.h" 5 #include "chrome/renderer/external_extension.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "chrome/common/chrome_switches.h" 8 #include "chrome/common/chrome_switches.h"
9 #include "chrome/common/render_messages.h" 9 #include "chrome/common/render_messages.h"
10 #include "chrome/common/search_provider.h" 10 #include "chrome/common/search_provider.h"
11 #include "content/public/renderer/render_view.h" 11 #include "content/public/renderer/render_view.h"
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" 12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
15 #include "v8/include/v8.h" 15 #include "v8/include/v8.h"
16 16
17 using WebKit::WebFrame; 17 using WebKit::WebFrame;
18 using WebKit::WebView; 18 using WebKit::WebView;
19 using content::RenderView; 19 using content::RenderView;
20 20
21 namespace extensions_v8 { 21 namespace extensions_v8 {
22 22
23 static const char* const kSearchProviderApiV1 = 23 static const char* const kSearchProviderApi =
24 "var external;" 24 "var external;"
25 "if (!external)" 25 "if (!external)"
26 " external = {};" 26 " external = {};"
27 "external.AddSearchProvider = function(name) {" 27 "external.AddSearchProvider = function(name) {"
28 " native function NativeAddSearchProvider();" 28 " native function NativeAddSearchProvider();"
29 " NativeAddSearchProvider(name);" 29 " NativeAddSearchProvider(name);"
30 "};";
31
32 static const char* const kSearchProviderApiV2 =
33 "var external;"
34 "if (!external)"
35 " external = {};"
36 "external.AddSearchProvider = function(name, default_provider) {"
37 " native function NativeAddSearchProvider();"
38 " NativeAddSearchProvider(name, default_provider);"
39 "};" 30 "};"
40 "external.IsSearchProviderInstalled = function(name) {" 31 "external.IsSearchProviderInstalled = function(name) {"
41 " native function NativeIsSearchProviderInstalled();" 32 " native function NativeIsSearchProviderInstalled();"
42 " return NativeIsSearchProviderInstalled(name);" 33 " return NativeIsSearchProviderInstalled(name);"
43 "};"; 34 "};";
44 35
45 #undef SEARCH_PROVIDER_API_V1
46
47 const char* const kExternalExtensionName = "v8/External"; 36 const char* const kExternalExtensionName = "v8/External";
48 37
49 // Should the new api's "IsSearchProviderInstalled and InstallSearchProvider
50 // with an extra parameter to indicate if the provider should be the default"
51 // be available?
52 static bool EnableSearchProviderV2() {
53 #if defined(OS_WIN)
54 return true;
55 #else
56 return CommandLine::ForCurrentProcess()->HasSwitch(
57 switches::kEnableSearchProviderApiV2);
58 #endif
59 }
60
61 class ExternalExtensionWrapper : public v8::Extension { 38 class ExternalExtensionWrapper : public v8::Extension {
62 public: 39 public:
63 ExternalExtensionWrapper(); 40 ExternalExtensionWrapper();
64 41
65 // Allows v8's javascript code to call the native functions defined 42 // Allows v8's javascript code to call the native functions defined
66 // in this class for window.external. 43 // in this class for window.external.
67 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( 44 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
68 v8::Handle<v8::String> name); 45 v8::Handle<v8::String> name);
69 46
70 // Helper function to find the RenderView. May return NULL. 47 // Helper function to find the RenderView. May return NULL.
71 static RenderView* GetRenderView(); 48 static RenderView* GetRenderView();
72 49
73 // Implementation of window.external.AddSearchProvider. 50 // Implementation of window.external.AddSearchProvider.
74 static v8::Handle<v8::Value> AddSearchProvider(const v8::Arguments& args); 51 static v8::Handle<v8::Value> AddSearchProvider(const v8::Arguments& args);
75 52
76 // Implementation of window.external.IsSearchProviderInstalled. 53 // Implementation of window.external.IsSearchProviderInstalled.
77 static v8::Handle<v8::Value> IsSearchProviderInstalled( 54 static v8::Handle<v8::Value> IsSearchProviderInstalled(
78 const v8::Arguments& args); 55 const v8::Arguments& args);
79 56
80 private: 57 private:
81 DISALLOW_COPY_AND_ASSIGN(ExternalExtensionWrapper); 58 DISALLOW_COPY_AND_ASSIGN(ExternalExtensionWrapper);
82 }; 59 };
83 60
84 ExternalExtensionWrapper::ExternalExtensionWrapper() 61 ExternalExtensionWrapper::ExternalExtensionWrapper()
85 : v8::Extension( 62 : v8::Extension(
86 kExternalExtensionName, 63 kExternalExtensionName,
87 !EnableSearchProviderV2() ? 64 kSearchProviderApi) {
88 kSearchProviderApiV1 : kSearchProviderApiV2) {
89 } 65 }
90 66
91 v8::Handle<v8::FunctionTemplate> ExternalExtensionWrapper::GetNativeFunction( 67 v8::Handle<v8::FunctionTemplate> ExternalExtensionWrapper::GetNativeFunction(
92 v8::Handle<v8::String> name) { 68 v8::Handle<v8::String> name) {
93 if (name->Equals(v8::String::New("NativeAddSearchProvider"))) 69 if (name->Equals(v8::String::New("NativeAddSearchProvider")))
94 return v8::FunctionTemplate::New(AddSearchProvider); 70 return v8::FunctionTemplate::New(AddSearchProvider);
95 71
96 if (name->Equals(v8::String::New("NativeIsSearchProviderInstalled"))) 72 if (name->Equals(v8::String::New("NativeIsSearchProviderInstalled")))
97 return v8::FunctionTemplate::New(IsSearchProviderInstalled); 73 return v8::FunctionTemplate::New(IsSearchProviderInstalled);
98 74
(...skipping 14 matching lines...) Expand all
113 } 89 }
114 90
115 // static 91 // static
116 v8::Handle<v8::Value> ExternalExtensionWrapper::AddSearchProvider( 92 v8::Handle<v8::Value> ExternalExtensionWrapper::AddSearchProvider(
117 const v8::Arguments& args) { 93 const v8::Arguments& args) {
118 if (!args.Length()) return v8::Undefined(); 94 if (!args.Length()) return v8::Undefined();
119 95
120 std::string name = std::string(*v8::String::Utf8Value(args[0])); 96 std::string name = std::string(*v8::String::Utf8Value(args[0]));
121 if (!name.length()) return v8::Undefined(); 97 if (!name.length()) return v8::Undefined();
122 98
123 search_provider::OSDDType provider_type =
124 ((args.Length() < 2) || !args[1]->BooleanValue()) ?
125 search_provider::EXPLICIT_PROVIDER :
126 search_provider::EXPLICIT_DEFAULT_PROVIDER;
127
128 RenderView* render_view = GetRenderView(); 99 RenderView* render_view = GetRenderView();
129 if (!render_view) return v8::Undefined(); 100 if (!render_view) return v8::Undefined();
130 101
131 if (provider_type != search_provider::EXPLICIT_DEFAULT_PROVIDER || 102 GURL osd_url(name);
132 render_view->GetWebView()->mainFrame()->isProcessingUserGesture()) { 103 if (!osd_url.is_empty()) {
133 GURL osd_url(name); 104 render_view->Send(new ChromeViewHostMsg_PageHasOSDD(
134 if (!osd_url.is_empty()) { 105 render_view->GetRoutingId(), render_view->GetPageId(), osd_url,
135 render_view->Send(new ChromeViewHostMsg_PageHasOSDD( 106 search_provider::EXPLICIT_PROVIDER));
136 render_view->GetRoutingId(), render_view->GetPageId(), osd_url,
137 provider_type));
138 }
139 } 107 }
140 108
141 return v8::Undefined(); 109 return v8::Undefined();
142 } 110 }
143 111
144 // static 112 // static
145 v8::Handle<v8::Value> ExternalExtensionWrapper::IsSearchProviderInstalled( 113 v8::Handle<v8::Value> ExternalExtensionWrapper::IsSearchProviderInstalled(
146 const v8::Arguments& args) { 114 const v8::Arguments& args) {
147 if (!args.Length()) return v8::Undefined(); 115 if (!args.Length()) return v8::Undefined();
148 v8::String::Utf8Value utf8name(args[0]); 116 v8::String::Utf8Value utf8name(args[0]);
(...skipping 21 matching lines...) Expand all
170 return v8::ThrowException(v8::Exception::Error(v8::String::Empty())); 138 return v8::ThrowException(v8::Exception::Error(v8::String::Empty()));
171 } 139 }
172 return v8::Integer::New(install); 140 return v8::Integer::New(install);
173 } 141 }
174 142
175 v8::Extension* ExternalExtension::Get() { 143 v8::Extension* ExternalExtension::Get() {
176 return new ExternalExtensionWrapper(); 144 return new ExternalExtensionWrapper();
177 } 145 }
178 146
179 } // namespace extensions_v8 147 } // namespace extensions_v8
OLDNEW
« no previous file with comments | « no previous file | chrome/renderer/external_extension_uitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698