| Index: chrome/renderer/searchbox/searchbox.cc
|
| diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc
|
| index 59163ee0739287a2d7528451536f5c4592cf0d3d..fa2e5b7927acb82c20cbd547c89e50414d3b55b3 100644
|
| --- a/chrome/renderer/searchbox/searchbox.cc
|
| +++ b/chrome/renderer/searchbox/searchbox.cc
|
| @@ -4,107 +4,22 @@
|
|
|
| #include "chrome/renderer/searchbox/searchbox.h"
|
|
|
| -#include "base/utf_string_conversions.h"
|
| -#include "chrome/common/render_messages.h"
|
| -#include "chrome/common/url_constants.h"
|
| +#include "chrome/common/instant_messages.h"
|
| #include "chrome/renderer/searchbox/searchbox_extension.h"
|
| #include "content/public/renderer/render_view.h"
|
| -#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h"
|
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
|
|
|
| -namespace {
|
| -
|
| -// Prefix for a thumbnail URL.
|
| -const char kThumbnailUrlPrefix[] = "chrome-search://thumb/";
|
| -
|
| -// Prefix for a thumbnail URL.
|
| -const char kFaviconUrlPrefix[] = "chrome-search://favicon/";
|
| -
|
| -}
|
| -
|
| SearchBox::SearchBox(content::RenderView* render_view)
|
| : content::RenderViewObserver(render_view),
|
| content::RenderViewObserverTracker<SearchBox>(render_view),
|
| verbatim_(false),
|
| selection_start_(0),
|
| - selection_end_(0),
|
| - results_base_(0),
|
| - start_margin_(0),
|
| - last_results_base_(0),
|
| - is_key_capture_enabled_(false),
|
| - display_instant_results_(false),
|
| - omnibox_font_size_(0),
|
| - last_restricted_id_(0) {
|
| + selection_end_(0) {
|
| }
|
|
|
| SearchBox::~SearchBox() {
|
| }
|
|
|
| -void SearchBox::SetSuggestions(
|
| - const std::vector<InstantSuggestion>& suggestions) {
|
| - if (!suggestions.empty() &&
|
| - suggestions[0].behavior == INSTANT_COMPLETE_REPLACE) {
|
| - query_ = suggestions[0].text;
|
| - verbatim_ = true;
|
| - selection_start_ = selection_end_ = query_.size();
|
| - }
|
| - // Explicitly allow empty vector to be sent to the browser.
|
| - render_view()->Send(new ChromeViewHostMsg_SetSuggestions(
|
| - render_view()->GetRoutingID(), render_view()->GetPageId(), suggestions));
|
| -}
|
| -
|
| -void SearchBox::ShowInstantOverlay(InstantShownReason reason,
|
| - int height,
|
| - InstantSizeUnits units) {
|
| - render_view()->Send(new ChromeViewHostMsg_ShowInstantOverlay(
|
| - render_view()->GetRoutingID(), render_view()->GetPageId(), reason,
|
| - height, units));
|
| -}
|
| -
|
| -void SearchBox::FocusOmnibox() {
|
| - render_view()->Send(new ChromeViewHostMsg_FocusOmnibox(
|
| - render_view()->GetRoutingID(), render_view()->GetPageId()));
|
| -}
|
| -
|
| -void SearchBox::StartCapturingKeyStrokes() {
|
| - render_view()->Send(new ChromeViewHostMsg_StartCapturingKeyStrokes(
|
| - render_view()->GetRoutingID(), render_view()->GetPageId()));
|
| -}
|
| -
|
| -void SearchBox::StopCapturingKeyStrokes() {
|
| - render_view()->Send(new ChromeViewHostMsg_StopCapturingKeyStrokes(
|
| - render_view()->GetRoutingID(), render_view()->GetPageId()));
|
| -}
|
| -
|
| -void SearchBox::NavigateToURL(const GURL& url,
|
| - content::PageTransition transition,
|
| - WindowOpenDisposition disposition) {
|
| - render_view()->Send(new ChromeViewHostMsg_SearchBoxNavigate(
|
| - render_view()->GetRoutingID(), render_view()->GetPageId(),
|
| - url, transition, disposition));
|
| -}
|
| -
|
| -void SearchBox::DeleteMostVisitedItem(int restrict_id) {
|
| - string16 url = RestrictedIdToURL(restrict_id);
|
| - render_view()->Send(new ChromeViewHostMsg_InstantDeleteMostVisitedItem(
|
| - render_view()->GetRoutingID(), GURL(url)));
|
| -}
|
| -
|
| -void SearchBox::UndoMostVisitedDeletion(int restrict_id) {
|
| - string16 url = RestrictedIdToURL(restrict_id);
|
| - render_view()->Send(new ChromeViewHostMsg_InstantUndoMostVisitedDeletion(
|
| - render_view()->GetRoutingID(), GURL(url)));
|
| -}
|
| -
|
| -void SearchBox::UndoAllMostVisitedDeletions() {
|
| - render_view()->Send(new ChromeViewHostMsg_InstantUndoAllMostVisitedDeletions(
|
| - render_view()->GetRoutingID()));
|
| -}
|
| -
|
| -int SearchBox::GetStartMargin() const {
|
| - return static_cast<int>(start_margin_ / GetZoom());
|
| -}
|
| -
|
| gfx::Rect SearchBox::GetPopupBounds() const {
|
| double zoom = GetZoom();
|
| return gfx::Rect(static_cast<int>(popup_bounds_.x() / zoom),
|
| @@ -113,212 +28,71 @@ gfx::Rect SearchBox::GetPopupBounds() const {
|
| static_cast<int>(popup_bounds_.height() / zoom));
|
| }
|
|
|
| -const std::vector<InstantAutocompleteResult>&
|
| - SearchBox::GetAutocompleteResults() {
|
| - // Remember the last requested autocomplete_results to account for race
|
| - // conditions between autocomplete providers returning new data and the user
|
| - // clicking on a suggestion.
|
| - last_autocomplete_results_ = autocomplete_results_;
|
| - last_results_base_ = results_base_;
|
| - return autocomplete_results_;
|
| -}
|
| -
|
| -const InstantAutocompleteResult* SearchBox::GetAutocompleteResultWithId(
|
| - size_t restricted_id) const {
|
| - if (restricted_id < last_results_base_ ||
|
| - restricted_id >= last_results_base_ + last_autocomplete_results_.size())
|
| - return NULL;
|
| - return &last_autocomplete_results_[restricted_id - last_results_base_];
|
| -}
|
| -
|
| -const ThemeBackgroundInfo& SearchBox::GetThemeBackgroundInfo() {
|
| - return theme_info_;
|
| +void SearchBox::SetSuggestion(const InstantSuggestion& suggestion) {
|
| + Send(new ChromeViewHostMsg_SearchBoxSetSuggestion(
|
| + routing_id(), render_view()->GetPageId(), suggestion));
|
| }
|
|
|
| bool SearchBox::OnMessageReceived(const IPC::Message& message) {
|
| bool handled = true;
|
| IPC_BEGIN_MESSAGE_MAP(SearchBox, message)
|
| + IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxDetermineInstantSupport,
|
| + OnDetermineInstantSupport)
|
| IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxChange, OnChange)
|
| IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxSubmit, OnSubmit)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxCancel, OnCancel)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxPopupResize, OnPopupResize)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxMarginChange, OnMarginChange)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_DetermineIfPageSupportsInstant,
|
| - OnDetermineIfPageSupportsInstant)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxAutocompleteResults,
|
| - OnAutocompleteResults)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxUpOrDownKeyPressed,
|
| - OnUpOrDownKeyPressed)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxCancelSelection,
|
| - OnCancelSelection)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxSetDisplayInstantResults,
|
| - OnSetDisplayInstantResults)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxKeyCaptureChanged,
|
| - OnKeyCaptureChange)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxThemeChanged,
|
| - OnThemeChanged)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxFontInformation,
|
| - OnFontInformationReceived)
|
| - IPC_MESSAGE_HANDLER(
|
| - ChromeViewMsg_SearchBoxGrantChromeSearchAccessFromOrigin,
|
| - OnGrantChromeSearchAccessFromOrigin)
|
| - IPC_MESSAGE_HANDLER(ChromeViewMsg_InstantMostVisitedItemsChanged,
|
| - OnMostVisitedChanged)
|
| + IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxBlur, OnBlur)
|
| + IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxPopupBounds, OnPopupBounds)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| }
|
|
|
| -void SearchBox::DidClearWindowObject(WebKit::WebFrame* frame) {
|
| - extensions_v8::SearchBoxExtension::DispatchOnWindowReady(frame);
|
| +void SearchBox::OnDetermineInstantSupport() {
|
| + bool supports_instant =
|
| + extensions_v8::SearchBoxExtension::DetermineInstantSupport(render_view());
|
| + Send(new ChromeViewHostMsg_SearchBoxInstantSupportDetermined(
|
| + routing_id(), render_view()->GetPageId(), supports_instant));
|
| }
|
|
|
| void SearchBox::OnChange(const string16& query,
|
| bool verbatim,
|
| size_t selection_start,
|
| size_t selection_end) {
|
| + if (query_ == query && verbatim_ == verbatim &&
|
| + selection_start_ == selection_start && selection_end_ == selection_end)
|
| + return;
|
| +
|
| query_ = query;
|
| verbatim_ = verbatim;
|
| selection_start_ = selection_start;
|
| selection_end_ = selection_end;
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - DVLOG(1) << render_view() << " OnChange";
|
| - extensions_v8::SearchBoxExtension::DispatchChange(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| + extensions_v8::SearchBoxExtension::Change(render_view());
|
| }
|
|
|
| void SearchBox::OnSubmit(const string16& query) {
|
| query_ = query;
|
| verbatim_ = true;
|
| - selection_start_ = selection_end_ = query_.size();
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - DVLOG(1) << render_view() << " OnSubmit";
|
| - extensions_v8::SearchBoxExtension::DispatchSubmit(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| + selection_start_ = query_.size();
|
| + selection_end_ = query_.size();
|
| + extensions_v8::SearchBoxExtension::Submit(render_view());
|
| Reset();
|
| }
|
|
|
| -void SearchBox::OnCancel(const string16& query) {
|
| +void SearchBox::OnBlur(const string16& query) {
|
| query_ = query;
|
| verbatim_ = true;
|
| - selection_start_ = selection_end_ = query_.size();
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - DVLOG(1) << render_view() << " OnCancel";
|
| - extensions_v8::SearchBoxExtension::DispatchCancel(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| + selection_start_ = query_.size();
|
| + selection_end_ = query_.size();
|
| + extensions_v8::SearchBoxExtension::Blur(render_view());
|
| Reset();
|
| }
|
|
|
| -void SearchBox::OnPopupResize(const gfx::Rect& bounds) {
|
| - popup_bounds_ = bounds;
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - DVLOG(1) << render_view() << " OnPopupResize";
|
| - extensions_v8::SearchBoxExtension::DispatchResize(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| -}
|
| -
|
| -void SearchBox::OnMarginChange(int margin, int width) {
|
| - start_margin_ = margin;
|
| -
|
| - // Override only the width parameter of the popup bounds.
|
| - popup_bounds_.set_width(width);
|
| -
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - extensions_v8::SearchBoxExtension::DispatchMarginChange(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| -}
|
| +void SearchBox::OnPopupBounds(const gfx::Rect& bounds) {
|
| + if (popup_bounds_ == bounds)
|
| + return;
|
|
|
| -void SearchBox::OnDetermineIfPageSupportsInstant() {
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - bool result = extensions_v8::SearchBoxExtension::PageSupportsInstant(
|
| - render_view()->GetWebView()->mainFrame());
|
| - DVLOG(1) << render_view() << " PageSupportsInstant: " << result;
|
| - render_view()->Send(new ChromeViewHostMsg_InstantSupportDetermined(
|
| - render_view()->GetRoutingID(), render_view()->GetPageId(), result));
|
| - }
|
| -}
|
| -
|
| -void SearchBox::OnAutocompleteResults(
|
| - const std::vector<InstantAutocompleteResult>& results) {
|
| - results_base_ += autocomplete_results_.size();
|
| - autocomplete_results_ = results;
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - DVLOG(1) << render_view() << " OnAutocompleteResults";
|
| - extensions_v8::SearchBoxExtension::DispatchAutocompleteResults(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| -}
|
| -
|
| -void SearchBox::OnUpOrDownKeyPressed(int count) {
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - DVLOG(1) << render_view() << " OnKeyPress: " << count;
|
| - extensions_v8::SearchBoxExtension::DispatchUpOrDownKeyPress(
|
| - render_view()->GetWebView()->mainFrame(), count);
|
| - }
|
| -}
|
| -
|
| -void SearchBox::OnCancelSelection(const string16& query) {
|
| - // TODO(sreeram): crbug.com/176101 The state reset below are somewhat wrong.
|
| - query_ = query;
|
| - verbatim_ = true;
|
| - selection_start_ = selection_end_ = query_.size();
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - DVLOG(1) << render_view() << " OnKeyPress ESC";
|
| - extensions_v8::SearchBoxExtension::DispatchEscKeyPress(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| -}
|
| -
|
| -void SearchBox::OnKeyCaptureChange(bool is_key_capture_enabled) {
|
| - if (is_key_capture_enabled != is_key_capture_enabled_ &&
|
| - render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - is_key_capture_enabled_ = is_key_capture_enabled;
|
| - DVLOG(1) << render_view() << " OnKeyCaptureChange";
|
| - extensions_v8::SearchBoxExtension::DispatchKeyCaptureChange(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| -}
|
| -
|
| -void SearchBox::OnSetDisplayInstantResults(bool display_instant_results) {
|
| - display_instant_results_ = display_instant_results;
|
| -}
|
| -
|
| -void SearchBox::OnThemeChanged(const ThemeBackgroundInfo& theme_info) {
|
| - theme_info_ = theme_info;
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - extensions_v8::SearchBoxExtension::DispatchThemeChange(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| -}
|
| -
|
| -void SearchBox::OnFontInformationReceived(const string16& omnibox_font,
|
| - size_t omnibox_font_size) {
|
| - omnibox_font_ = omnibox_font;
|
| - omnibox_font_size_ = omnibox_font_size;
|
| -}
|
| -
|
| -void SearchBox::OnGrantChromeSearchAccessFromOrigin(const GURL& origin_url) {
|
| - string16 chrome_search_scheme(ASCIIToUTF16(chrome::kChromeSearchScheme));
|
| - WebKit::WebSecurityPolicy::addOriginAccessWhitelistEntry(
|
| - origin_url,
|
| - chrome_search_scheme,
|
| - ASCIIToUTF16(chrome::kChromeUIFaviconHost),
|
| - false);
|
| - WebKit::WebSecurityPolicy::addOriginAccessWhitelistEntry(
|
| - origin_url,
|
| - chrome_search_scheme,
|
| - ASCIIToUTF16(chrome::kChromeUIThemeHost),
|
| - false);
|
| - WebKit::WebSecurityPolicy::addOriginAccessWhitelistEntry(
|
| - origin_url,
|
| - chrome_search_scheme,
|
| - ASCIIToUTF16(chrome::kChromeUIThumbnailHost),
|
| - false);
|
| + popup_bounds_ = bounds;
|
| + extensions_v8::SearchBoxExtension::PopupBounds(render_view());
|
| }
|
|
|
| double SearchBox::GetZoom() const {
|
| @@ -336,58 +110,5 @@ void SearchBox::Reset() {
|
| verbatim_ = false;
|
| selection_start_ = 0;
|
| selection_end_ = 0;
|
| - results_base_ = 0;
|
| popup_bounds_ = gfx::Rect();
|
| - start_margin_ = 0;
|
| - autocomplete_results_.clear();
|
| - is_key_capture_enabled_ = false;
|
| - theme_info_ = ThemeBackgroundInfo();
|
| - // Don't reset display_instant_results_ to prevent clearing it on committed
|
| - // results pages in extended mode. Otherwise resetting it is a no-op because
|
| - // a new loader is created when it changes; see crbug.com/164662.
|
| - // Also don't reset omnibox_font_ or omnibox_font_size_ since it never
|
| - // changes.
|
| -}
|
| -
|
| -void SearchBox::OnMostVisitedChanged(
|
| - const std::vector<MostVisitedItem>& items) {
|
| - most_visited_items_ = items;
|
| -
|
| - if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
|
| - extensions_v8::SearchBoxExtension::DispatchMostVisitedChanged(
|
| - render_view()->GetWebView()->mainFrame());
|
| - }
|
| -}
|
| -
|
| -const std::vector<MostVisitedItem>& SearchBox::GetMostVisitedItems() {
|
| - return most_visited_items_;
|
| -}
|
| -
|
| -int SearchBox::UrlToRestrictedId(string16 url) {
|
| - if (url_to_restricted_id_map_[url])
|
| - return url_to_restricted_id_map_[url];
|
| -
|
| - last_restricted_id_++;
|
| - url_to_restricted_id_map_[url] = last_restricted_id_;
|
| - restricted_id_to_url_map_[last_restricted_id_] = url;
|
| -
|
| - return last_restricted_id_;
|
| -}
|
| -
|
| -string16 SearchBox::RestrictedIdToURL(int id) {
|
| - return restricted_id_to_url_map_[id];
|
| -}
|
| -
|
| -string16 SearchBox::GenerateThumbnailUrl(int id) {
|
| - std::ostringstream ostr;
|
| - ostr << kThumbnailUrlPrefix << id;
|
| - GURL url = GURL(ostr.str());
|
| - return UTF8ToUTF16(url.spec());
|
| -}
|
| -
|
| -string16 SearchBox::GenerateFaviconUrl(int id) {
|
| - std::ostringstream ostr;
|
| - ostr << kFaviconUrlPrefix << id;
|
| - GURL url = GURL(ostr.str());
|
| - return UTF8ToUTF16(url.spec());
|
| }
|
|
|