searchbox.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 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) 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/string_number_conversions.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/utf_string_conversions.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/common/chrome_switches.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/omnibox_focus_state.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/render_messages.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/url_constants.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/renderer/searchbox/searchbox_extension.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/renderer/render_view.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/renderer_resources.h" 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "net/base/escape.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace { 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Size of the results cache. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kMaxInstantAutocompleteResultItemCacheSize = 100; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)bool IsThemeInfoEqual(const ThemeBackgroundInfo& new_theme_info, 28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const ThemeBackgroundInfo& old_theme_info) { 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return old_theme_info.color_r == new_theme_info.color_r && 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) old_theme_info.color_g == new_theme_info.color_g && 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) old_theme_info.color_b == new_theme_info.color_b && 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) old_theme_info.color_a == new_theme_info.color_a && 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch old_theme_info.theme_id == new_theme_info.theme_id && 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch old_theme_info.image_horizontal_alignment == 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_theme_info.image_horizontal_alignment && 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch old_theme_info.image_vertical_alignment == 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new_theme_info.image_vertical_alignment && 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) old_theme_info.image_tiling == new_theme_info.image_tiling && 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch old_theme_info.image_height == new_theme_info.image_height && 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch old_theme_info.has_attribution == new_theme_info.has_attribution; 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool AreMostVisitedItemsEqual( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<InstantMostVisitedItemIDPair>& new_items, 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<InstantMostVisitedItemIDPair>& old_items) { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (old_items.size() != new_items.size()) 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return false; 48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) for (size_t i = 0; i < new_items.size(); i++) { 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const InstantMostVisitedItem& old_item = old_items[i].second; 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const InstantMostVisitedItem& new_item = new_items[i].second; 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (new_item.url != old_item.url || new_item.title != old_item.title) 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return false; 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return true; 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)SearchBox::SearchBox(content::RenderView* render_view) 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) : content::RenderViewObserver(render_view), 61ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content::RenderViewObserverTracker<SearchBox>(render_view), 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) verbatim_(false), 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) query_is_restricted_(false), 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) selection_start_(0), 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_end_(0), 66ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch start_margin_(0), 67ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch is_key_capture_enabled_(false), 68ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch display_instant_results_(false), 69ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch omnibox_font_size_(0), 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) autocomplete_results_cache_(kMaxInstantAutocompleteResultItemCacheSize), 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) most_visited_items_cache_(kMaxInstantMostVisitedItemCacheSize) { 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)SearchBox::~SearchBox() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 76ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void SearchBox::SetSuggestions( 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const std::vector<InstantSuggestion>& suggestions) { 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (!suggestions.empty() && 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) suggestions[0].behavior == INSTANT_COMPLETE_REPLACE) { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetQuery(suggestions[0].text, true); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_start_ = selection_end_ = query_.size(); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Explicitly allow empty vector to be sent to the browser. 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch render_view()->Send(new ChromeViewHostMsg_SetSuggestions( 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->GetRoutingID(), render_view()->GetPageId(), suggestions)); 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void SearchBox::MarkQueryAsRestricted() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query_is_restricted_ = true; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query_.clear(); 92ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchBox::ShowInstantOverlay(int height, InstantSizeUnits units) { 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_ShowInstantOverlay( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view()->GetRoutingID(), render_view()->GetPageId(), height, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) units)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid SearchBox::FocusOmnibox() { 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_FocusOmnibox( 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view()->GetRoutingID(), render_view()->GetPageId(), 103ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch OMNIBOX_FOCUS_VISIBLE)); 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SearchBox::StartCapturingKeyStrokes() { 107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_FocusOmnibox( 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view()->GetRoutingID(), render_view()->GetPageId(), 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) OMNIBOX_FOCUS_INVISIBLE)); 110ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 111ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 112ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid SearchBox::StopCapturingKeyStrokes() { 113ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch render_view()->Send(new ChromeViewHostMsg_FocusOmnibox( 114ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch render_view()->GetRoutingID(), render_view()->GetPageId(), 115ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch OMNIBOX_FOCUS_NONE)); 116d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void SearchBox::NavigateToURL(const GURL& url, 119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) content::PageTransition transition, 120d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) WindowOpenDisposition disposition) { 121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_SearchBoxNavigate( 122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->GetRoutingID(), render_view()->GetPageId(), 123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) url, transition, disposition)); 124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 125d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 126d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void SearchBox::DeleteMostVisitedItem( 127d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) InstantRestrictedID most_visited_item_id) { 128d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_SearchBoxDeleteMostVisitedItem( 129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->GetRoutingID(), most_visited_item_id)); 130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 131d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::UndoMostVisitedDeletion( 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InstantRestrictedID most_visited_item_id) { 134d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_SearchBoxUndoMostVisitedDeletion( 135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->GetRoutingID(), most_visited_item_id)); 136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 137ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 138ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid SearchBox::UndoAllMostVisitedDeletions() { 139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->Send( 140ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch new ChromeViewHostMsg_SearchBoxUndoAllMostVisitedDeletions( 141ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch render_view()->GetRoutingID())); 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SearchBox::ShowBars() { 145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DVLOG(1) << render_view() << " ShowBars"; 146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_SearchBoxShowBars( 147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) render_view()->GetRoutingID(), render_view()->GetPageId())); 148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 150ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochvoid SearchBox::HideBars() { 151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DVLOG(1) << render_view() << " HideBars"; 152d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_SearchBoxHideBars( 153d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->GetRoutingID(), render_view()->GetPageId())); 154d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 155d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 156d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)int SearchBox::GetStartMargin() const { 157d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return static_cast<int>(start_margin_ / GetZoom()); 158d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 159d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Rect SearchBox::GetPopupBounds() const { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double zoom = GetZoom(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::Rect(static_cast<int>(popup_bounds_.x() / zoom), 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(popup_bounds_.y() / zoom), 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(popup_bounds_.width() / zoom), 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<int>(popup_bounds_.height() / zoom)); 166ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SearchBox::GetAutocompleteResults( 169ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<InstantAutocompleteResultIDPair>* results) const { 170ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch autocomplete_results_cache_.GetCurrentItems(results); 171d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 172d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)bool SearchBox::GetAutocompleteResultWithID( 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstantRestrictedID autocomplete_result_id, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstantAutocompleteResult* result) const { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return autocomplete_results_cache_.GetItemWithRestrictedID( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autocomplete_result_id, result); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const ThemeBackgroundInfo& SearchBox::GetThemeBackgroundInfo() { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return theme_info_; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool SearchBox::OnMessageReceived(const IPC::Message& message) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool handled = true; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(SearchBox, message) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxChange, OnChange) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxSubmit, OnSubmit) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxCancel, OnCancel) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxPopupResize, OnPopupResize) 1918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxMarginChange, OnMarginChange) 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxBarsHidden, OnBarsHidden) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_DetermineIfPageSupportsInstant, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDetermineIfPageSupportsInstant) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxAutocompleteResults, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAutocompleteResults) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxUpOrDownKeyPressed, 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnUpOrDownKeyPressed) 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxCancelSelection, 2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OnCancelSelection) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxSetDisplayInstantResults, 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OnSetDisplayInstantResults) 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxKeyCaptureChanged, 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnKeyCaptureChange) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxThemeChanged, 206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnThemeChanged) 207a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxFontInformation, 208a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) OnFontInformationReceived) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ChromeViewMsg_SearchBoxMostVisitedItemsChanged, 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnMostVisitedChanged) 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(handled = false) 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_END_MESSAGE_MAP() 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return handled; 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchBox::DidClearWindowObject(WebKit::WebFrame* frame) { 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchOnWindowReady(frame); 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 220a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void SearchBox::OnChange(const string16& query, 221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool verbatim, 222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t selection_start, 223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t selection_end) { 224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetQuery(query, verbatim); 225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) selection_start_ = selection_start; 226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) selection_end_ = selection_end; 227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If |query| is empty, this is due to the user backspacing away all the text 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // in the omnibox, or hitting Escape to restore the "permanent URL", or 230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // switching tabs, etc. In all these cases, there will be no corresponding 231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // OnAutocompleteResults(), so clear the autocomplete results ourselves, by 232a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // adding an empty set. Don't notify the page using an "onnativesuggestions" 233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // event, though. 234a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (query.empty()) { 235a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) autocomplete_results_cache_.AddItems( 236a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::vector<InstantAutocompleteResult>()); 237a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 238a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 239a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DVLOG(1) << render_view() << " OnChange"; 241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchChange( 242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_view()->GetWebView()->mainFrame()); 243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 244a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 245a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 246a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void SearchBox::OnSubmit(const string16& query) { 247a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Submit() is called when the user hits Enter to commit the omnibox text. 248a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // If |query| is non-blank, the user committed a search. If it's blank, the 249a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // omnibox text was a URL, and the user is navigating to it, in which case 250a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // we shouldn't update the |query_| or associated state. 251a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!query.empty()) { 252a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetQuery(query, true); 253a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) selection_start_ = selection_end_ = query_.size(); 254a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 255a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 256a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 257a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DVLOG(1) << render_view() << " OnSubmit"; 258a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchSubmit( 259a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) render_view()->GetWebView()->mainFrame()); 260a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!query.empty()) 263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Reset(); 264a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 266a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void SearchBox::OnCancel(const string16& query) { 267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetQuery(query, true); 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) selection_start_ = selection_end_ = query_.size(); 269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DVLOG(1) << render_view() << " OnCancel"; 271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchCancel( 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Reset(); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SearchBox::OnPopupResize(const gfx::Rect& bounds) { 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) popup_bounds_ = bounds; 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DVLOG(1) << render_view() << " OnPopupResize"; 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchResize( 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SearchBox::OnMarginChange(int margin, int width) { 287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch start_margin_ = margin; 288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Override only the width parameter of the popup bounds. 290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch popup_bounds_.set_width(width); 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchMarginChange( 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchBox::OnBarsHidden() { 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchBarsHidden( 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SearchBox::OnDetermineIfPageSupportsInstant() { 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool result = extensions_v8::SearchBoxExtension::PageSupportsInstant( 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DVLOG(1) << render_view() << " PageSupportsInstant: " << result; 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view()->Send(new ChromeViewHostMsg_InstantSupportDetermined( 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view()->GetRoutingID(), render_view()->GetPageId(), result)); 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SearchBox::OnAutocompleteResults( 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<InstantAutocompleteResult>& results) { 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autocomplete_results_cache_.AddItems(results); 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DVLOG(1) << render_view() << " OnAutocompleteResults"; 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchAutocompleteResults( 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchBox::OnUpOrDownKeyPressed(int count) { 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << render_view() << " OnKeyPress: " << count; 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchUpOrDownKeyPress( 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view()->GetWebView()->mainFrame(), count); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SearchBox::OnCancelSelection(const string16& query, 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool verbatim, 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t selection_start, 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t selection_end) { 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetQuery(query, verbatim); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) selection_start_ = selection_start; 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) selection_end_ = selection_end; 3401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << render_view() << " OnKeyPress ESC"; 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchEscKeyPress( 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void SearchBox::OnKeyCaptureChange(bool is_key_capture_enabled) { 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (is_key_capture_enabled != is_key_capture_enabled_ && 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_key_capture_enabled_ = is_key_capture_enabled; 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << render_view() << " OnKeyCaptureChange"; 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchKeyCaptureChange( 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void SearchBox::OnSetDisplayInstantResults(bool display_instant_results) { 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) display_instant_results_ = display_instant_results; 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid SearchBox::OnThemeChanged(const ThemeBackgroundInfo& theme_info) { 3621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (IsThemeInfoEqual(theme_info, theme_info_)) 3631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch theme_info_ = theme_info; 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch extensions_v8::SearchBoxExtension::DispatchThemeChange( 367eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch render_view()->GetWebView()->mainFrame()); 368eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void SearchBox::OnFontInformationReceived(const string16& omnibox_font, 372ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch size_t omnibox_font_size) { 373ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch omnibox_font_ = omnibox_font; 374ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch omnibox_font_size_ = omnibox_font_size; 375eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 377eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochdouble SearchBox::GetZoom() const { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebView* web_view = render_view()->GetWebView(); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_view) { 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double zoom = WebKit::WebView::zoomLevelToZoomFactor(web_view->zoomLevel()); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (zoom != 0) 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return zoom; 3837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 3847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return 1.0; 3857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SearchBox::Reset() { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query_.clear(); 389a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) verbatim_ = false; 390a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) query_is_restricted_ = false; 391a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) selection_start_ = 0; 392a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) selection_end_ = 0; 393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) popup_bounds_ = gfx::Rect(); 394a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) start_margin_ = 0; 395a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_key_capture_enabled_ = false; 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) theme_info_ = ThemeBackgroundInfo(); 3977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Don't reset display_instant_results_ to prevent clearing it on committed 3987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // results pages in extended mode. Otherwise resetting it is a no-op because 3997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // a new loader is created when it changes; see crbug.com/164662. 400d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Also don't reset omnibox_font_ or omnibox_font_size_ since it never 401d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // changes. 402d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 403d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::SetQuery(const string16& query, bool verbatim) { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) query_ = query; 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) verbatim_ = verbatim; 407ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch query_is_restricted_ = false; 408cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 409d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 410d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void SearchBox::OnMostVisitedChanged( 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<InstantMostVisitedItemIDPair>& items) { 4125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<InstantMostVisitedItemIDPair> old_items; 413ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch most_visited_items_cache_.GetCurrentItems(&old_items); 414ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (AreMostVisitedItemsEqual(items, old_items)) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_visited_items_cache_.AddItemsWithRestrictedID(items); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { 420d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) extensions_v8::SearchBoxExtension::DispatchMostVisitedChanged( 421d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view()->GetWebView()->mainFrame()); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SearchBox::GetMostVisitedItems( 426ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::vector<InstantMostVisitedItemIDPair>* items) const { 427cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return most_visited_items_cache_.GetCurrentItems(items); 428d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 429d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 430ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochbool SearchBox::GetMostVisitedItemWithID( 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstantRestrictedID most_visited_item_id, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InstantMostVisitedItem* item) const { 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return most_visited_items_cache_.GetItemWithRestrictedID(most_visited_item_id, 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)