OLD | NEW |
1 // Copyright (c) 2010 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/searchbox_extension.h" | 5 #include "chrome/renderer/searchbox_extension.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/string_split.h" | 11 #include "base/string_split.h" |
12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
13 #include "chrome/common/render_messages_params.h" | 13 #include "chrome/common/render_messages_params.h" |
| 14 #include "chrome/renderer/render_view_wrapper.h" |
14 #include "chrome/renderer/searchbox.h" | 15 #include "chrome/renderer/searchbox.h" |
15 #include "content/renderer/render_view.h" | |
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h" | 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h" |
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" |
19 #include "v8/include/v8.h" | 19 #include "v8/include/v8.h" |
20 | 20 |
21 using WebKit::WebFrame; | 21 using WebKit::WebFrame; |
22 using WebKit::WebScriptSource; | 22 using WebKit::WebScriptSource; |
23 using WebKit::WebString; | 23 using WebKit::WebString; |
24 using WebKit::WebView; | 24 using WebKit::WebView; |
25 | 25 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 class SearchBoxExtensionWrapper : public v8::Extension { | 126 class SearchBoxExtensionWrapper : public v8::Extension { |
127 public: | 127 public: |
128 SearchBoxExtensionWrapper(); | 128 SearchBoxExtensionWrapper(); |
129 | 129 |
130 // Allows v8's javascript code to call the native functions defined | 130 // Allows v8's javascript code to call the native functions defined |
131 // in this class for window.chrome. | 131 // in this class for window.chrome. |
132 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( | 132 virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( |
133 v8::Handle<v8::String> name); | 133 v8::Handle<v8::String> name); |
134 | 134 |
135 // Helper function to find the RenderView. May return NULL. | 135 // Helper function to find the RenderView. May return NULL. |
136 static RenderView* GetRenderView(); | 136 static RenderViewWrapper* GetRenderViewWrapper(); |
137 | 137 |
138 // Gets the value of the user's search query. | 138 // Gets the value of the user's search query. |
139 static v8::Handle<v8::Value> GetValue(const v8::Arguments& args); | 139 static v8::Handle<v8::Value> GetValue(const v8::Arguments& args); |
140 | 140 |
141 // Gets whether the |value| should be considered final -- as opposed to a | 141 // Gets whether the |value| should be considered final -- as opposed to a |
142 // partial match. This may be set if the user clicks a suggestion, presses | 142 // partial match. This may be set if the user clicks a suggestion, presses |
143 // forward delete, or in other cases where Chrome overrides. | 143 // forward delete, or in other cases where Chrome overrides. |
144 static v8::Handle<v8::Value> GetVerbatim(const v8::Arguments& args); | 144 static v8::Handle<v8::Value> GetVerbatim(const v8::Arguments& args); |
145 | 145 |
146 // Gets the start of the selection in the search box. | 146 // Gets the start of the selection in the search box. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 return v8::FunctionTemplate::New(GetWidth); | 191 return v8::FunctionTemplate::New(GetWidth); |
192 } else if (name->Equals(v8::String::New("GetHeight"))) { | 192 } else if (name->Equals(v8::String::New("GetHeight"))) { |
193 return v8::FunctionTemplate::New(GetHeight); | 193 return v8::FunctionTemplate::New(GetHeight); |
194 } else if (name->Equals(v8::String::New("SetSuggestions"))) { | 194 } else if (name->Equals(v8::String::New("SetSuggestions"))) { |
195 return v8::FunctionTemplate::New(SetSuggestions); | 195 return v8::FunctionTemplate::New(SetSuggestions); |
196 } | 196 } |
197 return v8::Handle<v8::FunctionTemplate>(); | 197 return v8::Handle<v8::FunctionTemplate>(); |
198 } | 198 } |
199 | 199 |
200 // static | 200 // static |
201 RenderView* SearchBoxExtensionWrapper::GetRenderView() { | 201 RenderViewWrapper* SearchBoxExtensionWrapper::GetRenderViewWrapper() { |
202 WebFrame* webframe = WebFrame::frameForEnteredContext(); | 202 WebFrame* webframe = WebFrame::frameForEnteredContext(); |
203 DCHECK(webframe) << "There should be an active frame since we just got " | 203 DCHECK(webframe) << "There should be an active frame since we just got " |
204 "a native function called."; | 204 "a native function called."; |
205 if (!webframe) return NULL; | 205 if (!webframe) return NULL; |
206 | 206 |
207 WebView* webview = webframe->view(); | 207 WebView* webview = webframe->view(); |
208 if (!webview) return NULL; // can happen during closing | 208 if (!webview) return NULL; // can happen during closing |
209 | 209 |
210 return RenderView::FromWebView(webview); | 210 return RenderViewWrapper::FromWebView(webview); |
211 } | 211 } |
212 | 212 |
213 // static | 213 // static |
214 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetValue( | 214 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetValue( |
215 const v8::Arguments& args) { | 215 const v8::Arguments& args) { |
216 RenderView* render_view = GetRenderView(); | 216 RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper(); |
217 if (!render_view) return v8::Undefined(); | 217 if (!render_view_wrapper) return v8::Undefined(); |
218 return v8::String::New( | 218 return v8::String::New( |
219 reinterpret_cast<const uint16_t*>( | 219 reinterpret_cast<const uint16_t*>( |
220 render_view->searchbox()->value().c_str()), | 220 render_view_wrapper->searchbox()->value().c_str()), |
221 render_view->searchbox()->value().length()); | 221 render_view_wrapper->searchbox()->value().length()); |
222 } | 222 } |
223 | 223 |
224 // static | 224 // static |
225 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetVerbatim( | 225 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetVerbatim( |
226 const v8::Arguments& args) { | 226 const v8::Arguments& args) { |
227 RenderView* render_view = GetRenderView(); | 227 RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper(); |
228 if (!render_view) return v8::Undefined(); | 228 if (!render_view_wrapper) return v8::Undefined(); |
229 return v8::Boolean::New(render_view->searchbox()->verbatim()); | 229 return v8::Boolean::New(render_view_wrapper->searchbox()->verbatim()); |
230 } | 230 } |
231 | 231 |
232 // static | 232 // static |
233 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart( | 233 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart( |
234 const v8::Arguments& args) { | 234 const v8::Arguments& args) { |
235 RenderView* render_view = GetRenderView(); | 235 RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper(); |
236 if (!render_view) return v8::Undefined(); | 236 if (!render_view_wrapper) return v8::Undefined(); |
237 return v8::Int32::New(render_view->searchbox()->selection_start()); | 237 return v8::Int32::New(render_view_wrapper->searchbox()->selection_start()); |
238 } | 238 } |
239 | 239 |
240 // static | 240 // static |
241 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionEnd( | 241 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionEnd( |
242 const v8::Arguments& args) { | 242 const v8::Arguments& args) { |
243 RenderView* render_view = GetRenderView(); | 243 RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper(); |
244 if (!render_view) return v8::Undefined(); | 244 if (!render_view_wrapper) return v8::Undefined(); |
245 return v8::Int32::New(render_view->searchbox()->selection_end()); | 245 return v8::Int32::New(render_view_wrapper->searchbox()->selection_end()); |
246 } | 246 } |
247 | 247 |
248 // static | 248 // static |
249 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetX( | 249 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetX( |
250 const v8::Arguments& args) { | 250 const v8::Arguments& args) { |
251 RenderView* render_view = GetRenderView(); | 251 RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper(); |
252 if (!render_view) return v8::Undefined(); | 252 if (!render_view_wrapper) return v8::Undefined(); |
253 return v8::Int32::New(render_view->searchbox()->rect().x()); | 253 return v8::Int32::New(render_view_wrapper->searchbox()->rect().x()); |
254 } | 254 } |
255 | 255 |
256 // static | 256 // static |
257 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetY( | 257 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetY( |
258 const v8::Arguments& args) { | 258 const v8::Arguments& args) { |
259 RenderView* render_view = GetRenderView(); | 259 RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper(); |
260 if (!render_view) return v8::Undefined(); | 260 if (!render_view_wrapper) return v8::Undefined(); |
261 return v8::Int32::New(render_view->searchbox()->rect().y()); | 261 return v8::Int32::New(render_view_wrapper->searchbox()->rect().y()); |
262 } | 262 } |
263 | 263 |
264 // static | 264 // static |
265 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetWidth( | 265 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetWidth( |
266 const v8::Arguments& args) { | 266 const v8::Arguments& args) { |
267 RenderView* render_view = GetRenderView(); | 267 RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper(); |
268 if (!render_view) return v8::Undefined(); | 268 if (!render_view_wrapper) return v8::Undefined(); |
269 return v8::Int32::New(render_view->searchbox()->rect().width()); | 269 return v8::Int32::New(render_view_wrapper->searchbox()->rect().width()); |
270 } | 270 } |
271 | 271 |
272 // static | 272 // static |
273 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetHeight( | 273 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetHeight( |
274 const v8::Arguments& args) { | 274 const v8::Arguments& args) { |
275 RenderView* render_view = GetRenderView(); | 275 RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper(); |
276 if (!render_view) return v8::Undefined(); | 276 if (!render_view_wrapper) return v8::Undefined(); |
277 return v8::Int32::New(render_view->searchbox()->rect().height()); | 277 return v8::Int32::New(render_view_wrapper->searchbox()->rect().height()); |
278 } | 278 } |
279 | 279 |
280 // Accepts a single argument in form: | 280 // Accepts a single argument in form: |
281 // { | 281 // { |
282 // suggestions: [ | 282 // suggestions: [ |
283 // { | 283 // { |
284 // value: "..." | 284 // value: "..." |
285 // } | 285 // } |
286 // ] | 286 // ] |
287 // } | 287 // } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 suggestion_json->Get(v8::String::New("complete_behavior")); | 335 suggestion_json->Get(v8::String::New("complete_behavior")); |
336 if (complete_value->IsString()) { | 336 if (complete_value->IsString()) { |
337 if (complete_value->Equals(v8::String::New("never"))) | 337 if (complete_value->Equals(v8::String::New("never"))) |
338 behavior = INSTANT_COMPLETE_NEVER; | 338 behavior = INSTANT_COMPLETE_NEVER; |
339 else if (complete_value->Equals(v8::String::New("delayed"))) | 339 else if (complete_value->Equals(v8::String::New("delayed"))) |
340 behavior = INSTANT_COMPLETE_DELAYED; | 340 behavior = INSTANT_COMPLETE_DELAYED; |
341 } | 341 } |
342 } | 342 } |
343 } | 343 } |
344 | 344 |
345 if (RenderView* render_view = GetRenderView()) | 345 if (RenderViewWrapper* render_view_wrapper = GetRenderViewWrapper()) |
346 render_view->searchbox()->SetSuggestions(suggestions, behavior); | 346 render_view_wrapper->searchbox()->SetSuggestions(suggestions, behavior); |
347 return v8::Undefined(); | 347 return v8::Undefined(); |
348 } | 348 } |
349 | 349 |
350 // static | 350 // static |
351 bool Dispatch(WebFrame* frame, const std::string& event_name) { | 351 bool Dispatch(WebFrame* frame, const std::string& event_name) { |
352 DCHECK(frame) << "Dispatch requires frame"; | 352 DCHECK(frame) << "Dispatch requires frame"; |
353 if (!frame) return false; | 353 if (!frame) return false; |
354 | 354 |
355 v8::HandleScope handle_scope; | 355 v8::HandleScope handle_scope; |
356 v8::Local<v8::Context> context = frame->mainWorldScriptContext(); | 356 v8::Local<v8::Context> context = frame->mainWorldScriptContext(); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 | 427 |
428 return supports_searchbox_api || supports_deprecated_api; | 428 return supports_searchbox_api || supports_deprecated_api; |
429 } | 429 } |
430 | 430 |
431 // static | 431 // static |
432 v8::Extension* SearchBoxExtension::Get() { | 432 v8::Extension* SearchBoxExtension::Get() { |
433 return new SearchBoxExtensionWrapper(); | 433 return new SearchBoxExtensionWrapper(); |
434 } | 434 } |
435 | 435 |
436 } // namespace extensions_v8 | 436 } // namespace extensions_v8 |
OLD | NEW |