diff options
-rw-r--r-- | chrome/renderer/render_view.cc | 66 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 25 | ||||
-rw-r--r-- | chrome/renderer/search_extension.cc | 3 | ||||
-rw-r--r-- | chrome/renderer/searchbox.cc | 93 | ||||
-rw-r--r-- | chrome/renderer/searchbox.h | 49 | ||||
-rw-r--r-- | chrome/renderer/searchbox_extension.cc | 22 |
6 files changed, 146 insertions, 112 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 1057dfd..4501baf 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -87,7 +87,7 @@ #include "chrome/renderer/renderer_webapplicationcachehost_impl.h" #include "chrome/renderer/renderer_webstoragenamespace_impl.h" #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" -#include "chrome/renderer/searchbox_extension.h" +#include "chrome/renderer/searchbox.h" #include "chrome/renderer/speech_input_dispatcher.h" #include "chrome/renderer/spellchecker/spellcheck.h" #include "chrome/renderer/translate_helper.h" @@ -578,6 +578,7 @@ RenderView::RenderView(RenderThreadBase* render_thread, speech_input_dispatcher_(NULL), device_orientation_dispatcher_(NULL), print_helper_(NULL), + searchbox_(NULL), accessibility_ack_pending_(false), pending_app_icon_requests_(0), session_storage_namespace_id_(session_storage_namespace_id) { @@ -651,6 +652,7 @@ RenderView::RenderView(RenderThreadBase* render_thread, page_click_tracker->AddListener(autofill_agent); new TranslateHelper(this); print_helper_ = new PrintWebViewHelper(this); + searchbox_ = new SearchBox(this); if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableClientSidePhishingDetection)) { @@ -1056,12 +1058,6 @@ bool RenderView::OnMessageReceived(const IPC::Message& message) { IPC_MESSAGE_HANDLER(ViewMsg_SetBackground, OnSetBackground) IPC_MESSAGE_HANDLER(ViewMsg_EnablePreferredSizeChangedMode, OnEnablePreferredSizeChangedMode) - IPC_MESSAGE_HANDLER(ViewMsg_SearchBoxChange, OnSearchBoxChange) - IPC_MESSAGE_HANDLER(ViewMsg_SearchBoxSubmit, OnSearchBoxSubmit) - IPC_MESSAGE_HANDLER(ViewMsg_SearchBoxCancel, OnSearchBoxCancel) - IPC_MESSAGE_HANDLER(ViewMsg_SearchBoxResize, OnSearchBoxResize) - IPC_MESSAGE_HANDLER(ViewMsg_DetermineIfPageSupportsInstant, - OnDetermineIfPageSupportsInstant) IPC_MESSAGE_HANDLER(ViewMsg_DisableScrollbarsForSmallWindows, OnDisableScrollbarsForSmallWindows) IPC_MESSAGE_HANDLER(ViewMsg_SetRendererPrefs, OnSetRendererPrefs) @@ -4533,11 +4529,6 @@ WebNode RenderView::GetFocusedNode() const { return WebNode(); } -void RenderView::SetSuggestions(const std::vector<std::string>& suggestions) { - // Explicitly allow empty vector to be sent to the browser. - Send(new ViewHostMsg_SetSuggestions(routing_id_, page_id_, suggestions)); -} - void RenderView::EvaluateScript(const string16& frame_xpath, const string16& script, int id, @@ -4771,57 +4762,6 @@ void RenderView::OnEnablePreferredSizeChangedMode(int flags) { } } -void RenderView::OnSearchBoxChange(const string16& value, - bool verbatim, - int selection_start, - int selection_end) { - search_box_.value = value; - search_box_.verbatim = verbatim; - search_box_.selection_start = selection_start; - search_box_.selection_end = selection_end; - if (!webview() || !webview()->mainFrame()) - return; - extensions_v8::SearchBoxExtension::DispatchChange(webview()->mainFrame()); -} - -void RenderView::OnSearchBoxSubmit(const string16& value, bool verbatim) { - search_box_.value = value; - search_box_.verbatim = verbatim; - if (!webview() || !webview()->mainFrame()) - return; - extensions_v8::SearchBoxExtension::DispatchSubmit(webview()->mainFrame()); -} - -void RenderView::OnSearchBoxCancel() { - search_box_.verbatim = false; - if (!webview() || !webview()->mainFrame()) - return; - extensions_v8::SearchBoxExtension::DispatchCancel(webview()->mainFrame()); -} - -void RenderView::OnSearchBoxResize(const gfx::Rect& bounds) { - search_box_.x = bounds.x(); - search_box_.y = bounds.y(); - search_box_.width = bounds.width(); - search_box_.height = bounds.height(); - if (!webview() || !webview()->mainFrame()) - return; - extensions_v8::SearchBoxExtension::DispatchResize(webview()->mainFrame()); -} - -void RenderView::OnDetermineIfPageSupportsInstant(const string16& value, - bool verbatim, - int selection_start, - int selection_end) { - search_box_.value = value; - search_box_.verbatim = verbatim; - search_box_.selection_start = selection_start; - search_box_.selection_end = selection_end; - bool result = extensions_v8::SearchBoxExtension::PageSupportsInstant( - webview()->mainFrame()); - Send(new ViewHostMsg_InstantSupportDetermined(routing_id_, page_id_, result)); -} - void RenderView::OnDisableScrollbarsForSmallWindows( const gfx::Size& disable_scrollbar_size_limit) { disable_scrollbars_size_limit_ = disable_scrollbar_size_limit; diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index 8cc4e79..7cbd422 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -32,7 +32,6 @@ #include "chrome/renderer/pepper_plugin_delegate_impl.h" #include "chrome/renderer/render_widget.h" #include "chrome/renderer/renderer_webcookiejar_impl.h" -#include "chrome/renderer/searchbox.h" #include "ipc/ipc_platform_file.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebAccessibilityNotification.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebConsoleMessage.h" @@ -75,6 +74,7 @@ class PepperDeviceTest; class PrintWebViewHelper; class RenderViewObserver; class RenderViewVisitor; +class SearchBox; class SkBitmap; class SpeechInputDispatcher; class WebPluginDelegatePepper; @@ -242,9 +242,7 @@ class RenderView : public RenderWidget, disable_scrollbars_size_limit_.height() <= height)); } - const SearchBox& searchbox() const { - return search_box_; - } + SearchBox* searchbox() const { return searchbox_; } const WebKit::WebNode& context_menu_node() { return context_menu_node_; } @@ -262,9 +260,6 @@ class RenderView : public RenderWidget, GetSearchProviderInstallState(WebKit::WebFrame* frame, const std::string& url); - // Sends ViewHostMsg_SetSuggestions to the browser. - void SetSuggestions(const std::vector<std::string>& suggestions); - // Evaluates a string of JavaScript in a particular frame. void EvaluateScript(const string16& frame_xpath, const string16& jscript, @@ -849,17 +844,6 @@ class RenderView : public RenderWidget, const gfx::Point& screen_pt, WebKit::WebDragOperationsMask operations_allowed); void OnEnablePreferredSizeChangedMode(int flags); - void OnSearchBoxChange(const string16& value, - bool verbatim, - int selection_start, - int selection_end); - void OnSearchBoxSubmit(const string16& value, bool verbatim); - void OnSearchBoxCancel(); - void OnSearchBoxResize(const gfx::Rect& bounds); - void OnDetermineIfPageSupportsInstant(const string16& value, - bool verbatim, - int selection_start, - int selection_end); void OnEnableViewSourceMode(); void OnExecuteCode(const ViewMsg_ExecuteCode_Params& params); void OnExecuteEditCommand(const std::string& name, const std::string& value); @@ -1264,8 +1248,6 @@ class RenderView : public RenderWidget, // The text selection the last time DidChangeSelection got called. std::string last_selection_; - SearchBox search_box_; - // View ---------------------------------------------------------------------- // Type of view attached with RenderView. See view_types.h @@ -1342,6 +1324,9 @@ class RenderView : public RenderWidget, // RenderViewObserver interface. PrintWebViewHelper* print_helper_; + // Weak pointer since it implements RenderViewObserver interface. + SearchBox* searchbox_; + scoped_refptr<AudioMessageFilter> audio_message_filter_; // Handles accessibility requests into the renderer side, as well as diff --git a/chrome/renderer/search_extension.cc b/chrome/renderer/search_extension.cc index 2d4ab33..ee71cf6 100644 --- a/chrome/renderer/search_extension.cc +++ b/chrome/renderer/search_extension.cc @@ -10,6 +10,7 @@ #include "base/command_line.h" #include "chrome/common/render_messages_params.h" #include "chrome/renderer/render_view.h" +#include "chrome/renderer/searchbox.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "v8/include/v8.h" @@ -82,7 +83,7 @@ v8::Handle<v8::Value> SearchExtensionWrapper::SetSuggestResult( std::vector<std::string> suggestions; suggestions.push_back(std::string(*v8::String::Utf8Value(args[0]))); - render_view->SetSuggestions(suggestions); + render_view->searchbox()->SetSuggestions(suggestions); return v8::Undefined(); } diff --git a/chrome/renderer/searchbox.cc b/chrome/renderer/searchbox.cc index 6766f25..c8aac0f 100644 --- a/chrome/renderer/searchbox.cc +++ b/chrome/renderer/searchbox.cc @@ -4,15 +4,92 @@ #include "chrome/renderer/searchbox.h" -SearchBox::SearchBox() - : verbatim(false), - selection_start(0), - selection_end(0), - x(0), - y(0), - width(0), - height(0) { +#include "chrome/common/render_messages.h" +#include "chrome/renderer/render_view.h" +#include "chrome/renderer/searchbox_extension.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" + +using WebKit::WebView; + +SearchBox::SearchBox(RenderView* render_view) + : RenderViewObserver(render_view), + verbatim_(false), + selection_start_(0), + selection_end_(0) { } SearchBox::~SearchBox() { } + +void SearchBox::SetSuggestions(const std::vector<std::string>& suggestions) { + // Explicitly allow empty vector to be sent to the browser. + render_view()->Send(new ViewHostMsg_SetSuggestions( + render_view()->routing_id(), render_view()->page_id(), suggestions)); +} + +bool SearchBox::OnMessageReceived(const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(SearchBox, message) + IPC_MESSAGE_HANDLER(ViewMsg_SearchBoxChange, OnChange) + IPC_MESSAGE_HANDLER(ViewMsg_SearchBoxSubmit, OnSubmit) + IPC_MESSAGE_HANDLER(ViewMsg_SearchBoxCancel, OnCancel) + IPC_MESSAGE_HANDLER(ViewMsg_SearchBoxResize, OnResize) + IPC_MESSAGE_HANDLER(ViewMsg_DetermineIfPageSupportsInstant, + OnDetermineIfPageSupportsInstant) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void SearchBox::OnChange(const string16& value, + bool verbatim, + int selection_start, + int selection_end) { + value_ = value; + verbatim_ = verbatim; + selection_start_ = selection_start; + selection_end_ = selection_end; + if (!render_view()->webview() || !render_view()->webview()->mainFrame()) + return; + extensions_v8::SearchBoxExtension::DispatchChange( + render_view()->webview()->mainFrame()); +} + +void SearchBox::OnSubmit(const string16& value, bool verbatim) { + value_ = value; + verbatim_ = verbatim; + if (!render_view()->webview() || !render_view()->webview()->mainFrame()) + return; + extensions_v8::SearchBoxExtension::DispatchSubmit( + render_view()->webview()->mainFrame()); +} + +void SearchBox::OnCancel() { + verbatim_ = false; + if (!render_view()->webview() || !render_view()->webview()->mainFrame()) + return; + extensions_v8::SearchBoxExtension::DispatchCancel( + render_view()->webview()->mainFrame()); +} + +void SearchBox::OnResize(const gfx::Rect& bounds) { + rect_ = bounds; + if (!render_view()->webview() || !render_view()->webview()->mainFrame()) + return; + extensions_v8::SearchBoxExtension::DispatchResize( + render_view()->webview()->mainFrame()); +} + +void SearchBox::OnDetermineIfPageSupportsInstant(const string16& value, + bool verbatim, + int selection_start, + int selection_end) { + value_ = value; + verbatim_ = verbatim; + selection_start_ = selection_start; + selection_end_ = selection_end; + bool result = extensions_v8::SearchBoxExtension::PageSupportsInstant( + render_view()->webview()->mainFrame()); + render_view()->Send(new ViewHostMsg_InstantSupportDetermined( + render_view()->routing_id(), render_view()->page_id(), result)); +} diff --git a/chrome/renderer/searchbox.h b/chrome/renderer/searchbox.h index d09c73a..f2fd164 100644 --- a/chrome/renderer/searchbox.h +++ b/chrome/renderer/searchbox.h @@ -6,20 +6,49 @@ #define CHROME_RENDERER_SEARCHBOX_H_ #pragma once +#include <vector> + #include "base/string16.h" +#include "chrome/renderer/render_view_observer.h" +#include "ui/gfx/rect.h" -struct SearchBox { - SearchBox(); +class SearchBox : public RenderViewObserver { + public: + explicit SearchBox(RenderView* render_view); ~SearchBox(); - string16 value; - bool verbatim; - uint32 selection_start; - uint32 selection_end; - uint32 x; - uint32 y; - uint32 width; - uint32 height; + // Sends ViewHostMsg_SetSuggestions to the browser. + void SetSuggestions(const std::vector<std::string>& suggestions); + + const string16& value() { return value_; } + bool verbatim() { return verbatim_; } + uint32 selection_start() { return selection_start_; } + uint32 selection_end() { return selection_end_; } + const gfx::Rect& rect() { return rect_; } + + private: + // RenderViewObserver implementation. + virtual bool OnMessageReceived(const IPC::Message& message); + + void OnChange(const string16& value, + bool verbatim, + int selection_start, + int selection_end); + void OnSubmit(const string16& value, bool verbatim); + void OnCancel(); + void OnResize(const gfx::Rect& bounds); + void OnDetermineIfPageSupportsInstant(const string16& value, + bool verbatim, + int selection_start, + int selection_end); + + string16 value_; + bool verbatim_; + uint32 selection_start_; + uint32 selection_end_; + gfx::Rect rect_; + + DISALLOW_COPY_AND_ASSIGN(SearchBox); }; #endif // CHROME_RENDERER_SEARCHBOX_H_ diff --git a/chrome/renderer/searchbox_extension.cc b/chrome/renderer/searchbox_extension.cc index 9be60bd..36fc94c 100644 --- a/chrome/renderer/searchbox_extension.cc +++ b/chrome/renderer/searchbox_extension.cc @@ -12,6 +12,7 @@ #include "base/stringprintf.h" #include "chrome/common/render_messages_params.h" #include "chrome/renderer/render_view.h" +#include "chrome/renderer/searchbox.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" @@ -215,8 +216,9 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetValue( RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); return v8::String::New( - reinterpret_cast<const uint16_t*>(render_view->searchbox().value.c_str()), - render_view->searchbox().value.length()); + reinterpret_cast<const uint16_t*>( + render_view->searchbox()->value().c_str()), + render_view->searchbox()->value().length()); } // static @@ -224,7 +226,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetVerbatim( const v8::Arguments& args) { RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Boolean::New(render_view->searchbox().verbatim); + return v8::Boolean::New(render_view->searchbox()->verbatim()); } // static @@ -232,7 +234,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart( const v8::Arguments& args) { RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Int32::New(render_view->searchbox().selection_start); + return v8::Int32::New(render_view->searchbox()->selection_start()); } // static @@ -240,7 +242,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionEnd( const v8::Arguments& args) { RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Int32::New(render_view->searchbox().selection_end); + return v8::Int32::New(render_view->searchbox()->selection_end()); } // static @@ -248,7 +250,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetX( const v8::Arguments& args) { RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Int32::New(render_view->searchbox().x); + return v8::Int32::New(render_view->searchbox()->rect().x()); } // static @@ -256,7 +258,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetY( const v8::Arguments& args) { RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Int32::New(render_view->searchbox().y); + return v8::Int32::New(render_view->searchbox()->rect().y()); } // static @@ -264,7 +266,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetWidth( const v8::Arguments& args) { RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Int32::New(render_view->searchbox().width); + return v8::Int32::New(render_view->searchbox()->rect().width()); } // static @@ -272,7 +274,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetHeight( const v8::Arguments& args) { RenderView* render_view = GetRenderView(); if (!render_view) return v8::Undefined(); - return v8::Int32::New(render_view->searchbox().height); + return v8::Int32::New(render_view->searchbox()->rect().height()); } // Accepts a single argument in form: @@ -330,7 +332,7 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( } if (RenderView* render_view = GetRenderView()) - render_view->SetSuggestions(suggestions); + render_view->searchbox()->SetSuggestions(suggestions); return v8::Undefined(); } |