searchbox.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/renderer/searchbox/searchbox.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/renderer/searchbox/searchbox_extension.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SearchBox::SearchBox(content::RenderView* render_view)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : content::RenderViewObserver(render_view),
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::RenderViewObserverTracker<SearchBox>(render_view),
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      verbatim_(false),
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      selection_start_(0),
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      selection_end_(0),
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      results_base_(0),
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      last_results_base_(0),
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      is_focused_(false),
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      active_tab_is_ntp_(false) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SearchBox::~SearchBox() {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::SetSuggestions(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::vector<InstantSuggestion>& suggestions) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!suggestions.empty() &&
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      suggestions[0].behavior == INSTANT_COMPLETE_REPLACE) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    query_ = suggestions[0].text;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    verbatim_ = true;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    selection_start_ = selection_end_ = query_.size();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Explicitly allow empty vector to be sent to the browser.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  render_view()->Send(new ChromeViewHostMsg_SetSuggestions(
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      render_view()->GetRoutingID(), render_view()->GetPageId(), suggestions));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::ShowInstantPreview(InstantShownReason reason,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   int height,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   InstantSizeUnits units) {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  render_view()->Send(new ChromeViewHostMsg_ShowInstantPreview(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      render_view()->GetRoutingID(), render_view()->GetPageId(), reason,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      height, units));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Rect SearchBox::GetRect() {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Need to adjust for scale.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (rect_.IsEmpty())
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return rect_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebKit::WebView* web_view = render_view()->GetWebView();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!web_view)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return rect_;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double zoom = WebKit::WebView::zoomLevelToZoomFactor(web_view->zoomLevel());
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (zoom == 0)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return rect_;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return gfx::Rect(static_cast<int>(static_cast<float>(rect_.x()) / zoom),
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   static_cast<int>(static_cast<float>(rect_.y()) / zoom),
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   static_cast<int>(static_cast<float>(rect_.width()) / zoom),
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   static_cast<int>(static_cast<float>(rect_.height()) / zoom));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const std::vector<InstantAutocompleteResult>&
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SearchBox::GetAutocompleteResults() {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remember the last requested autocomplete_results to account for race
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // conditions between autocomplete providers returning new data and the user
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // clicking on a suggestion.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_autocomplete_results_ = autocomplete_results_;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_results_base_ = results_base_;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return autocomplete_results_;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const InstantAutocompleteResult* SearchBox::GetAutocompleteResultWithId(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t restricted_id) const {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (restricted_id < last_results_base_ ||
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      restricted_id >= last_results_base_ + last_autocomplete_results_.size())
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &last_autocomplete_results_[restricted_id - last_results_base_];
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SearchBox::OnMessageReceived(const IPC::Message& message) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool handled = true;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_BEGIN_MESSAGE_MAP(SearchBox, message)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxChange, OnChange)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxSubmit, OnSubmit)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxCancel, OnCancel)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxResize, OnResize)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_DetermineIfPageSupportsInstant,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnDetermineIfPageSupportsInstant)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxAutocompleteResults,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnAutocompleteResults)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxUpOrDownKeyPressed,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnUpOrDownKeyPressed)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxFocus, OnFocus)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxBlur, OnBlur)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxActiveTabModeChanged,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        OnActiveTabModeChanged)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IPC_MESSAGE_UNHANDLED(handled = false)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IPC_END_MESSAGE_MAP()
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return handled;
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnChange(const string16& query,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         bool verbatim,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         size_t selection_start,
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         size_t selection_end) {
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  query_ = query;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  verbatim_ = verbatim;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  selection_start_ = selection_start;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  selection_end_ = selection_end;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchChange(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnSubmit(const string16& query) {
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  query_ = query;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  verbatim_ = true;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  selection_start_ = selection_end_ = query_.size();
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchSubmit(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Reset();
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnCancel(const string16& query) {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  query_ = query;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  verbatim_ = true;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  selection_start_ = selection_end_ = query_.size();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchCancel(
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Reset();
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnResize(const gfx::Rect& bounds) {
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rect_ = bounds;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchResize(
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnDetermineIfPageSupportsInstant() {
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool result = extensions_v8::SearchBoxExtension::PageSupportsInstant(
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    render_view()->Send(new ChromeViewHostMsg_InstantSupportDetermined(
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetRoutingID(), render_view()->GetPageId(), result));
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnAutocompleteResults(
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::vector<InstantAutocompleteResult>& results) {
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  results_base_ += autocomplete_results_.size();
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autocomplete_results_ = results;
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchAutocompleteResults(
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnUpOrDownKeyPressed(int count) {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchUpOrDownKeyPress(
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame(), count);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnFocus() {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  is_focused_ = true;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchFocus(
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnBlur() {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  is_focused_ = false;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchBlur(
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::OnActiveTabModeChanged(bool active_tab_is_ntp) {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  active_tab_is_ntp_ = active_tab_is_ntp;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    extensions_v8::SearchBoxExtension::DispatchContextChange(
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        render_view()->GetWebView()->mainFrame());
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::Reset() {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  query_.clear();
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  verbatim_ = false;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  selection_start_ = selection_end_ = 0;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  results_base_ = 0;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rect_ = gfx::Rect();
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autocomplete_results_.clear();
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  is_focused_ = false;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
207