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/browser/ui/views/location_bar/location_bar_view.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/i18n/rtl.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/command_updater.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/defaults.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/omnibox/omnibox_api.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/location_bar_controller.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/tab_helper.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/favicon/favicon_tab_helper.h" 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/search/instant_service.h" 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/search/instant_service_factory.h" 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/search/search.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/search_engines/template_url_service_factory.h" 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/translate/chrome_translate_client.h" 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/translate/translate_service.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_finder.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_instant_controller.h" 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/browser_window.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/omnibox/location_bar_util.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_popup_model.h" 39a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "chrome/browser/ui/omnibox/omnibox_popup_view.h" 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/passwords/manage_passwords_icon.h" 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/view_ids.h" 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/browser_dialogs.h" 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/add_to_app_launcher_view.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/content_setting_image_view.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/ev_bubble_view.h" 48ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "chrome/browser/ui/views/location_bar/generated_credit_card_view.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/keyword_hint_view.h" 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/location_bar/location_bar_layout.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/location_icon_view.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/open_pdf_in_reader_view.h" 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/origin_chip_view.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/page_action_image_view.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/page_action_with_badge_view.h" 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/search_button.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/selected_keyword_view.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/star_view.h" 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/translate_icon_view.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/zoom_bubble_view.h" 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/zoom_view.h" 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h" 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/views/passwords/manage_passwords_icon_view.h" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/zoom/zoom_controller.h" 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/translate/core/browser/language_state.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_widget_host_view.h" 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/feature_switch.h" 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h" 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/accessibility/ax_view_state.h" 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/dragdrop/drag_drop_types.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/theme_provider.h" 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event.h" 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/gfx/animation/slide_animation.h" 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/canvas.h" 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/color_utils.h" 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_skia_operations.h" 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ui/gfx/scoped_canvas.h" 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/skia_util.h" 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/text_utils.h" 90ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ui/native_theme/native_theme.h" 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "ui/views/background.h" 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/border.h" 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/button_drag_utils.h" 94ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ui/views/controls/button/image_button.h" 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h" 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/first_run_bubble.h" 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using views::View; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const gfx::Tween::Type kShowTweenType = gfx::Tween::LINEAR_OUT_SLOW_IN; 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const gfx::Tween::Type kHideTweenType = gfx::Tween::FAST_OUT_LINEAR_IN; 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// The search button images are made to look as if they overlay the normal edge 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// images, but to align things, the search button needs to be inset horizontally 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// by 1 px. 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const int kSearchButtonInset = 1; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Given a containing |height| and a |base_font_list|, shrinks the font size 1160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// until the font list will fit within |height| while having its cap height 1170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// vertically centered. Returns the correctly-sized font list. 1180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// 1190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// The expected layout: 1200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// +--------+-----------------------------------------------+------------+ 1210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | | y offset | space | 1220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | +--------+-------------------+------------------+ above | 1230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | | | | internal leading | cap height | 1240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | box | font | ascent (baseline) +------------------+------------+ 1250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | height | height | | cap height | 1260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | | |-------------------+------------------+------------+ 1270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | | | descent (height - baseline) | space | 1280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | +--------+--------------------------------------+ below | 1290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// | | space at bottom | cap height | 1300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// +--------+-----------------------------------------------+------------+ 1310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Goal: 1320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// center of box height == center of cap height 1330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// (i.e. space above cap height == space below cap height) 1340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Restrictions: 1350f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// y offset >= 0 1360f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// space at bottom >= 0 1370f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// (i.e. Entire font must be visible inside the box.) 1380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)gfx::FontList GetLargestFontListWithHeightBound( 1390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const gfx::FontList& base_font_list, 1400f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) int height) { 1410f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) gfx::FontList font_list = base_font_list; 1420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (int font_size = font_list.GetFontSize(); font_size > 1; --font_size) { 1430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const int internal_leading = 1440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) font_list.GetBaseline() - font_list.GetCapHeight(); 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Some platforms don't support getting the cap height, and simply return 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the entire font ascent from GetCapHeight(). Centering the ascent makes 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the font look too low, so if GetCapHeight() returns the ascent, center 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // the entire font height instead. 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const int space = 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) height - ((internal_leading != 0) ? 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) font_list.GetCapHeight() : font_list.GetHeight()); 1520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const int y_offset = space / 2 - internal_leading; 1530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const int space_at_bottom = height - (y_offset + font_list.GetHeight()); 1540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if ((y_offset >= 0) && (space_at_bottom >= 0)) 1550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) break; 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) font_list = font_list.DeriveWithSizeDelta(-1); 15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 1580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return font_list; 15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)int GetEditLeadingInternalSpace() { 162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The textfield has 1 px of whitespace before the text in the RTL case only. 163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return base::i18n::IsRTL() ? 1 : 0; 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Functor for moving BookmarkManagerPrivate page actions to the right via 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// stable_partition. 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class IsPageActionViewRightAligned { 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit IsPageActionViewRightAligned(ExtensionService* extension_service) 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : extension_service_(extension_service) {} 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool operator()(PageActionWithBadgeView* page_action_view) { 17446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return extension_service_ 17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ->GetExtensionById( 17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) page_action_view->image_view()->page_action()->extension_id(), 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) false) 17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ->permissions_data() 17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ->HasAPIPermission(extensions::APIPermission::kBookmarkManagerPrivate); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionService* extension_service_; 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // NOTE: Can't DISALLOW_COPY_AND_ASSIGN as we pass this object by value to 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // std::stable_partition(). 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 19290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// LocationBarView ----------------------------------------------------------- 19390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)const int LocationBarView::kNormalEdgeThickness = 2; 19690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const int LocationBarView::kPopupEdgeThickness = 1; 1975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst int LocationBarView::kItemPadding = 3; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int LocationBarView::kIconInternalPadding = 2; 19990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const int LocationBarView::kBubblePadding = 1; 200b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)const char LocationBarView::kViewClassName[] = "LocationBarView"; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LocationBarView::LocationBarView(Browser* browser, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandUpdater* command_updater, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 20690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool is_popup_mode) 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : LocationBar(profile), 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) OmniboxEditController(command_updater), 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_(browser), 210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_(NULL), 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_(delegate), 212a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) origin_chip_view_(NULL), 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_icon_view_(NULL), 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ev_bubble_view_(NULL), 215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_(NULL), 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_keyword_view_(NULL), 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggested_text_view_(NULL), 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyword_hint_view_(NULL), 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mic_search_view_(NULL), 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zoom_view_(NULL), 221ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch generated_credit_card_view_(NULL), 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) open_pdf_in_reader_view_(NULL), 223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) manage_passwords_icon_view_(NULL), 2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) translate_icon_view_(NULL), 225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) add_to_app_launcher_view_(NULL), 226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) star_view_(NULL), 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) search_button_(NULL), 22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) is_popup_mode_(is_popup_mode), 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_focus_rect_(false), 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template_url_service_(NULL), 231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch dropdown_animation_offset_(0), 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) starting_omnibox_offset_(0), 23346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_offset_(0), 23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) starting_omnibox_leading_inset_(0), 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_leading_inset_(0), 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_width_(0), 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ending_omnibox_width_(0), 23858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) weak_ptr_factory_(this) { 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) edit_bookmarks_enabled_.Init( 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prefs::kEditBookmarksEnabled, profile->GetPrefs(), 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&LocationBarView::Update, base::Unretained(this), 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<content::WebContents*>(NULL))); 2437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (browser_) 2457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch browser_->search_model()->AddObserver(this); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LocationBarView::~LocationBarView() { 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (template_url_service_) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template_url_service_->RemoveObserver(this); 2517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (browser_) 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch browser_->search_model()->RemoveObserver(this); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 256c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, public: 257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LocationBarView::Init() { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We need to be in a Widget, otherwise GetNativeTheme() may change and we're 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not prepared for that. 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(GetWidget()); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const int kOmniboxPopupBorderImages[] = 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IMAGE_GRID(IDR_OMNIBOX_POPUP_BORDER_AND_SHADOW); 265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const int kOmniboxBorderImages[] = IMAGE_GRID(IDR_TEXTFIELD); 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) border_painter_.reset(views::Painter::CreateImageGridPainter( 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_popup_mode_ ? kOmniboxPopupBorderImages : kOmniboxBorderImages)); 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_icon_view_ = new LocationIconView(this); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_icon_view_->set_drag_controller(this); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(location_icon_view_); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Determine the main font. 274a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) gfx::FontList font_list = ResourceBundle::GetSharedInstance().GetFontList( 275a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ResourceBundle::BaseFont); 276a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const int current_font_size = font_list.GetFontSize(); 27790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const int desired_font_size = browser_defaults::kOmniboxFontPixelSize; 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (current_font_size != desired_font_size) { 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) font_list = 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) font_list.DeriveWithSizeDelta(desired_font_size - current_font_size); 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 28290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Shrink large fonts to make them fit. 28390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // TODO(pkasting): Stretch the location bar instead in this case. 2840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const int location_height = GetInternalHeight(true); 2850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) font_list = GetLargestFontListWithHeightBound(font_list, location_height); 2860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 2870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // Determine the font for use inside the bubbles. The bubble background 2880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // images have 1 px thick edges, which we don't want to overlap. 289868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const int kBubbleInteriorVerticalPadding = 1; 2900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const int bubble_vertical_padding = 2910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) (kBubblePadding + kBubbleInteriorVerticalPadding) * 2; 2920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const gfx::FontList bubble_font_list( 2930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetLargestFontListWithHeightBound( 2940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) font_list, location_height - bubble_vertical_padding)); 29590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const SkColor background_color = 297868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetColor(ToolbarModel::NONE, LocationBarView::BACKGROUND); 298868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ev_bubble_view_ = new EVBubbleView( 2990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bubble_font_list, GetColor(ToolbarModel::EV_SECURE, SECURITY_TEXT), 3000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) background_color, this); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ev_bubble_view_->set_drag_controller(this); 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(ev_bubble_view_); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initialize the Omnibox view. 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view_ = new OmniboxViewViews( 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this, profile(), command_updater(), 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) is_popup_mode_ || 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) (browser_->is_app() && CommandLine::ForCurrentProcess()-> 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) HasSwitch(switches::kEnableStreamlinedHostedApps)), 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this, font_list); 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_->Init(); 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view_->SetFocusable(true); 313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddChildView(omnibox_view_); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Initialize the inline autocomplete view which is visible only when IME is 316868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // turned on. Use the same font with the omnibox and highlighted background. 317a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ime_inline_autocomplete_view_ = new views::Label(base::string16(), font_list); 318868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 319868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->SetAutoColorReadabilityEnabled(false); 320868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->set_background( 321868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) views::Background::CreateSolidBackground(GetNativeTheme()->GetSystemColor( 322868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused))); 323868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->SetEnabledColor( 324868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetNativeTheme()->GetSystemColor( 325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ui::NativeTheme::kColorId_TextfieldSelectionColor)); 326868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->SetVisible(false); 327868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) AddChildView(ime_inline_autocomplete_view_); 328868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 329a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) origin_chip_view_ = new OriginChipView(this, profile(), font_list); 330a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) origin_chip_view_->SetFocusable(false); 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) origin_chip_view_->set_drag_controller(this); 332a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) AddChildView(origin_chip_view_); 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 33490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const SkColor text_color = GetColor(ToolbarModel::NONE, TEXT); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_keyword_view_ = new SelectedKeywordView( 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bubble_font_list, text_color, background_color, profile()); 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(selected_keyword_view_); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 339a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) suggested_text_view_ = new views::Label(base::string16(), font_list); 34090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) suggested_text_view_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 34190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) suggested_text_view_->SetAutoColorReadabilityEnabled(false); 34290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) suggested_text_view_->SetEnabledColor(GetColor( 34390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ToolbarModel::NONE, LocationBarView::DEEMPHASIZED_TEXT)); 34490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) suggested_text_view_->SetVisible(false); 34590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AddChildView(suggested_text_view_); 34690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 347868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) keyword_hint_view_ = new KeywordHintView( 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile(), font_list, 349868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GetColor(ToolbarModel::NONE, LocationBarView::DEEMPHASIZED_TEXT), 350868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) background_color); 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(keyword_hint_view_); 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 353ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch mic_search_view_ = new views::ImageButton(this); 354ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch mic_search_view_->set_id(VIEW_ID_MIC_SEARCH_BUTTON); 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mic_search_view_->SetAccessibilityFocusable(true); 356ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch mic_search_view_->SetTooltipText( 357ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch l10n_util::GetStringUTF16(IDS_TOOLTIP_MIC_SEARCH)); 358ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch mic_search_view_->SetImage( 359ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch views::Button::STATE_NORMAL, 360ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 361ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch IDR_OMNIBOX_MIC_SEARCH)); 362ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch mic_search_view_->SetImageAlignment(views::ImageButton::ALIGN_CENTER, 363ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch views::ImageButton::ALIGN_MIDDLE); 3647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mic_search_view_->SetVisible(false); 3657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch AddChildView(mic_search_view_); 3667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < CONTENT_SETTINGS_NUM_TYPES; ++i) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingImageView* content_blocked_view = 369868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new ContentSettingImageView(static_cast<ContentSettingsType>(i), this, 3700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bubble_font_list, text_color, 3710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) background_color); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_views_.push_back(content_blocked_view); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_blocked_view->SetVisible(false); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddChildView(content_blocked_view); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) generated_credit_card_view_ = new GeneratedCreditCardView(delegate_); 378ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch AddChildView(generated_credit_card_view_); 3797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 3803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) zoom_view_ = new ZoomView(delegate_); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) zoom_view_->set_id(VIEW_ID_ZOOM_BUTTON); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(zoom_view_); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch open_pdf_in_reader_view_ = new OpenPDFInReaderView(); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddChildView(open_pdf_in_reader_view_); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 387010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) manage_passwords_icon_view_ = new ManagePasswordsIconView(command_updater()); 388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddChildView(manage_passwords_icon_view_); 389f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) translate_icon_view_ = new TranslateIconView(command_updater()); 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) translate_icon_view_->SetVisible(false); 392f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddChildView(translate_icon_view_); 393f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 394f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) add_to_app_launcher_view_ = new AddToAppLauncherView( 395f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this, bubble_font_list, text_color, background_color); 396f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) add_to_app_launcher_view_->SetVisible(false); 397f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) AddChildView(add_to_app_launcher_view_); 398f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) star_view_ = new StarView(command_updater()); 4007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch star_view_->SetVisible(false); 4017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch AddChildView(star_view_); 4027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 403f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) search_button_ = new SearchButton(this); 404a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) search_button_->SetVisible(false); 405a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AddChildView(search_button_); 406a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 407effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch show_url_animation_.reset(new gfx::SlideAnimation(this)); 40846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->SetTweenType(kShowTweenType); 409effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch show_url_animation_->SetSlideDuration(200); 410effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 411effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch hide_url_animation_.reset(new gfx::SlideAnimation(this)); 41246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->SetTweenType(kHideTweenType); 41346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->SetSlideDuration(175); 414effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::Source<Profile> profile_source = content::Source<Profile>(profile()); 4160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch registrar_.Add( 4170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch this, chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, profile_source); 41823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) registrar_.Add(this, 41923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, 42023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) profile_source); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize the location entry. We do this to avoid a black flash which is 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visible when the location entry has just been initialized. 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Update(NULL); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool LocationBarView::IsInitialized() const { 428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return omnibox_view_ != NULL; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SkColor LocationBarView::GetColor(ToolbarModel::SecurityLevel security_level, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColorKind kind) const { 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ui::NativeTheme* native_theme = GetNativeTheme(); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (kind) { 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case BACKGROUND: 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return native_theme->GetSystemColor( 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::NativeTheme::kColorId_TextfieldDefaultBackground); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case TEXT: 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return native_theme->GetSystemColor( 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::NativeTheme::kColorId_TextfieldDefaultColor); 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case SELECTED_TEXT: 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return native_theme->GetSystemColor( 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::NativeTheme::kColorId_TextfieldSelectionColor); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case DEEMPHASIZED_TEXT: 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return color_utils::AlphaBlend( 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetColor(security_level, TEXT), 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetColor(security_level, BACKGROUND), 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 128); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SECURITY_TEXT: { 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor color; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (security_level) { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ToolbarModel::EV_SECURE: 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ToolbarModel::SECURE: 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color = SkColorSetRGB(7, 149, 0); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ToolbarModel::SECURITY_WARNING: 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case ToolbarModel::SECURITY_POLICY_WARNING: 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetColor(security_level, DEEMPHASIZED_TEXT); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ToolbarModel::SECURITY_ERROR: 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color = SkColorSetRGB(162, 0, 0); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetColor(security_level, TEXT); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return color_utils::GetReadableColor( 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) color, GetColor(security_level, BACKGROUND)); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetColor(security_level, TEXT); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 484c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::ZoomChangedForActiveTab(bool can_show_bubble) { 485c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK(zoom_view_); 486c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (RefreshZoomView()) { 487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Layout(); 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SchedulePaint(); 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 4907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu WebContents* web_contents = GetWebContents(); 4925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (can_show_bubble && zoom_view_->visible() && web_contents) 4935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ZoomBubbleView::ShowBubble(web_contents, true); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LocationBarView::SetPreviewEnabledPageAction(ExtensionAction* page_action, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool preview_enabled) { 49890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (is_popup_mode_) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(page_action); 5025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu WebContents* web_contents = GetWebContents(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshPageActionViews(); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageActionWithBadgeView* page_action_view = 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<PageActionWithBadgeView*>(GetPageActionView(page_action)); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(page_action_view); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!page_action_view) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_action_view->image_view()->set_preview_enabled(preview_enabled); 5125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu page_action_view->UpdateVisibility(web_contents, GetToolbarModel()->GetURL()); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Layout(); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SchedulePaint(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)PageActionWithBadgeView* LocationBarView::GetPageActionView( 518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ExtensionAction* page_action) { 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(page_action); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (PageActionViews::const_iterator i(page_action_views_.begin()); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != page_action_views_.end(); ++i) { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*i)->image_view()->page_action() == page_action) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *i; 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LocationBarView::SetStarToggled(bool on) { 529ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (star_view_) 530ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch star_view_->SetToggled(on); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 533f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void LocationBarView::SetTranslateIconToggled(bool on) { 534f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) translate_icon_view_->SetToggled(on); 535f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 536f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 537f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)gfx::Point LocationBarView::GetOmniboxViewOrigin() const { 538f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Point origin(omnibox_view_->bounds().origin()); 53946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin.set_x(GetMirroredXInView(origin.x() - current_omnibox_offset_)); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View::ConvertPointToScreen(this, &origin); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return origin; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 544a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void LocationBarView::SetImeInlineAutocompletion(const base::string16& text) { 545868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->SetText(text); 546868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->SetVisible(!text.empty()); 547868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 548868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 549a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void LocationBarView::SetGrayTextAutocompletion(const base::string16& text) { 55090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (suggested_text_view_->text() != text) { 55190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) suggested_text_view_->SetText(text); 55290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) suggested_text_view_->SetVisible(!text.empty()); 55390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Layout(); 55490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SchedulePaint(); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 558a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::string16 LocationBarView::GetGrayTextAutocompletion() const { 55946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return HasValidSuggestText() ? 56046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) suggested_text_view_->text() : base::string16(); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 563c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::SetShowFocusRect(bool show) { 564c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch show_focus_rect_ = show; 565c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SchedulePaint(); 566c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 567c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 568c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::SelectAll() { 569c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch omnibox_view_->SelectAll(true); 570c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 571c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 572c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochgfx::Point LocationBarView::GetLocationBarAnchorPoint() const { 573c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The +1 in the next line creates a 1-px gap between icon and arrow tip. 574cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Point icon_bottom(0, location_icon_view_->GetImageBounds().bottom() - 575c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch LocationBarView::kIconInternalPadding + 1); 576cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Point icon_center(location_icon_view_->GetImageBounds().CenterPoint()); 577c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::Point point(icon_center.x(), icon_bottom.y()); 578cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ConvertPointToTarget(location_icon_view_, this, &point); 579c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return point; 580c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 581c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 582c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochviews::View* LocationBarView::generated_credit_card_view() { 583c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return generated_credit_card_view_; 584c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 585c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 586c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint LocationBarView::GetInternalHeight(bool use_preferred_size) { 587c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int total_height = 588c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch use_preferred_size ? GetPreferredSize().height() : height(); 589c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return std::max(total_height - (vertical_edge_thickness() * 2), 0); 590c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 591c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 592c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::GetOmniboxPopupPositioningInfo( 593c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::Point* top_left_screen_coord, 594c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int* popup_width, 595c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int* left_margin, 596c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int* right_margin) { 597c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Because the popup might appear atop the attached bookmark bar, there won't 598c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // necessarily be a client edge separating it from the rest of the toolbar. 599c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Therefore we position the popup high enough so it can draw its own client 600c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // edge at the top, in the same place the toolbar would normally draw the 601c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // client edge. 602c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch *top_left_screen_coord = gfx::Point( 603c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 0, 604c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch parent()->height() - views::NonClientFrameView::kClientEdgeThickness); 605c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::View::ConvertPointToScreen(parent(), top_left_screen_coord); 606c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch *popup_width = parent()->width(); 607c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 608c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::Rect location_bar_bounds(bounds()); 609c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch location_bar_bounds.Inset(kNormalEdgeThickness, 0); 610c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch *left_margin = location_bar_bounds.x(); 611c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch *right_margin = *popup_width - location_bar_bounds.right(); 612c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 613c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 614c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 615c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, public LocationBar implementation: 616c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 617c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::FocusLocation(bool select_all) { 618c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch omnibox_view_->SetFocus(); 619c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (select_all) 620c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch omnibox_view_->SelectAll(true); 621c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 622c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 623c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::Revert() { 624c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch omnibox_view_->RevertAll(); 625c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 626c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 627c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochOmniboxView* LocationBarView::GetOmniboxView() { 628c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return omnibox_view_; 629c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 630c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 631c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 632c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, public views::View implementation: 633c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 634c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool LocationBarView::HasFocus() const { 635c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return omnibox_view_->model()->has_focus(); 636c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 637c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 638c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::GetAccessibleState(ui::AXViewState* state) { 639c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!IsInitialized()) 640c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return; 641c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 642c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch state->role = ui::AX_ROLE_LOCATION_BAR; 643c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch state->name = l10n_util::GetStringUTF16(IDS_ACCNAME_LOCATION); 644c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch state->value = omnibox_view_->GetText(); 645c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 646c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::string16::size_type entry_start; 647c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::string16::size_type entry_end; 648c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch omnibox_view_->GetSelectionBounds(&entry_start, &entry_end); 649c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch state->selection_start = entry_start; 650c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch state->selection_end = entry_end; 651c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 652c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (is_popup_mode_) { 653c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch state->AddStateFlag(ui::AX_STATE_READ_ONLY); 654c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 655c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch state->set_value_callback = 656c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::Bind(&LocationBarView::AccessibilitySetValue, 657c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch weak_ptr_factory_.GetWeakPtr()); 658c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 659c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 660c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 661cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)gfx::Size LocationBarView::GetPreferredSize() const { 662cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Compute minimum height. 663cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Size min_size(border_painter_->GetMinimumSize()); 664a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!IsInitialized()) 665cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return min_size; 666a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gfx::Size search_button_min_size(search_button_->GetMinimumSize()); 667a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) min_size.SetToMax(search_button_min_size); 668cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 669cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Compute width of omnibox-leading content. 670cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const int horizontal_edge_thickness = GetHorizontalEdgeThickness(); 671cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int leading_width = horizontal_edge_thickness; 672cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // TODO(pkasting): Make the origin chip min width sane, and make the chip 673cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // handle being shrunken down more gracefully; then uncomment this. 674cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) /*if (GetToolbarModel()->ShouldShowOriginChip()) 675cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) leading_width += origin_chip_view_->GetMinimumSize().width();*/ 676cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (ShouldShowKeywordBubble()) { 677cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // The selected keyword view can collapse completely. 678cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if (ShouldShowEVBubble()) { 679cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) leading_width += kBubblePadding + 680cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ev_bubble_view_->GetMinimumSizeForLabelText( 681cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetToolbarModel()->GetEVCertName()).width(); 682cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if (!origin_chip_view_->visible()) { 683cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) leading_width += 684cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kItemPadding + location_icon_view_->GetMinimumSize().width(); 685cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 686cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) leading_width += kItemPadding - GetEditLeadingInternalSpace(); 687cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 688cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Compute width of omnibox-trailing content. 689cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int trailing_width = search_button_->visible() ? 690cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) (search_button_->GetMinimumSize().width() + kSearchButtonInset) : 691cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) horizontal_edge_thickness; 692cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) trailing_width += IncrementalMinimumWidth(star_view_) + 693cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IncrementalMinimumWidth(translate_icon_view_) + 694cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IncrementalMinimumWidth(open_pdf_in_reader_view_) + 695cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IncrementalMinimumWidth(manage_passwords_icon_view_) + 696cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IncrementalMinimumWidth(zoom_view_) + 697cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IncrementalMinimumWidth(generated_credit_card_view_) + 698f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IncrementalMinimumWidth(mic_search_view_) + 699f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IncrementalMinimumWidth(add_to_app_launcher_view_) + kItemPadding; 700cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (PageActionViews::const_iterator i(page_action_views_.begin()); 701cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) i != page_action_views_.end(); ++i) 702cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) trailing_width += IncrementalMinimumWidth((*i)); 703cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (ContentSettingViews::const_iterator i(content_setting_views_.begin()); 704cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) i != content_setting_views_.end(); ++i) 705cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) trailing_width += IncrementalMinimumWidth((*i)); 706cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 707cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) min_size.set_width( 708cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) leading_width + omnibox_view_->GetMinimumSize().width() + trailing_width); 709a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return min_size; 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LocationBarView::Layout() { 713a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!IsInitialized()) 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 716cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) origin_chip_view_->SetVisible(GetToolbarModel()->ShouldShowOriginChip()); 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) selected_keyword_view_->SetVisible(false); 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) location_icon_view_->SetVisible(false); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ev_bubble_view_->SetVisible(false); 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_hint_view_->SetVisible(false); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 722868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LocationBarLayout leading_decorations( 723cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) LocationBarLayout::LEFT_EDGE, 724cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kItemPadding - GetEditLeadingInternalSpace()); 725868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) LocationBarLayout trailing_decorations(LocationBarLayout::RIGHT_EDGE, 7265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kItemPadding); 727868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 72846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const int origin_chip_preferred_width = 72946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->GetPreferredSize().width(); 73046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const int origin_chip_width = 73146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->visible() ? origin_chip_preferred_width : 0; 73246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Always give the origin chip view its desired size and lay it out, even when 73346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // it's not visible, so we can calculate the correct animation values below 73446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // when switching to tabs that have the origin chip hidden. 73546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->SetBounds(0, 0, origin_chip_preferred_width, height()); 73646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->Layout(); 737a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 738868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const int bubble_location_y = vertical_edge_thickness() + kBubblePadding; 739cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::string16 keyword(omnibox_view_->model()->keyword()); 740868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // In some cases (e.g. fullscreen mode) we may have 0 height. We still want 741868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // to position our child views in this case, because other things may be 742868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // positioned relative to them (e.g. the "bookmark added" bubble if the user 743868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // hits ctrl-d). 744868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const int location_height = GetInternalHeight(false); 745868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const int bubble_height = std::max(location_height - (kBubblePadding * 2), 0); 746cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (ShouldShowKeywordBubble()) { 747868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) leading_decorations.AddDecoration(bubble_location_y, bubble_height, true, 0, 7485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kBubblePadding, kItemPadding, 749868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) selected_keyword_view_); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selected_keyword_view_->keyword() != keyword) { 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_keyword_view_->SetKeyword(keyword); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TemplateURL* template_url = 7535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile(profile())-> 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetTemplateURLForKeyword(keyword); 7551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (template_url && 7561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) (template_url->GetType() == TemplateURL::OMNIBOX_API_EXTENSION)) { 7575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Image image = extensions::OmniboxAPI::Get(profile())-> 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetOmniboxIcon(template_url->GetExtensionId()); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_keyword_view_->SetImage(image.AsImageSkia()); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_keyword_view_->set_is_extension_icon(true); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_keyword_view_->SetImage( 763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *(GetThemeProvider()->GetImageSkiaNamed(IDR_OMNIBOX_SEARCH))); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_keyword_view_->set_is_extension_icon(false); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 767cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else if (ShouldShowEVBubble()) { 7683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ev_bubble_view_->SetLabel(GetToolbarModel()->GetEVCertName()); 769868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The largest fraction of the omnibox that can be taken by the EV bubble. 770868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const double kMaxBubbleFraction = 0.5; 771868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) leading_decorations.AddDecoration(bubble_location_y, bubble_height, false, 772868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kMaxBubbleFraction, kBubblePadding, 7735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kItemPadding, ev_bubble_view_); 774a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else if (!origin_chip_view_->visible()) { 77590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) leading_decorations.AddDecoration( 77690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) vertical_edge_thickness(), location_height, 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) location_icon_view_); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (star_view_->visible()) { 78190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) trailing_decorations.AddDecoration( 7825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu vertical_edge_thickness(), location_height, star_view_); 7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 784f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (add_to_app_launcher_view_->visible()) { 785f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) trailing_decorations.AddDecoration( 786f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) vertical_edge_thickness(), location_height, add_to_app_launcher_view_); 787f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 788f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (translate_icon_view_->visible()) { 7891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) trailing_decorations.AddDecoration( 7905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu vertical_edge_thickness(), location_height, translate_icon_view_); 7911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (open_pdf_in_reader_view_->visible()) { 79390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) trailing_decorations.AddDecoration( 7945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu vertical_edge_thickness(), location_height, open_pdf_in_reader_view_); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (manage_passwords_icon_view_->visible()) { 797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) trailing_decorations.AddDecoration(vertical_edge_thickness(), 7985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu location_height, 799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) manage_passwords_icon_view_); 800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (PageActionViews::const_iterator i(page_action_views_.begin()); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != page_action_views_.end(); ++i) { 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*i)->visible()) { 80490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) trailing_decorations.AddDecoration( 8055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu vertical_edge_thickness(), location_height, (*i)); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 80890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (zoom_view_->visible()) { 80990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) trailing_decorations.AddDecoration(vertical_edge_thickness(), 8105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu location_height, zoom_view_); 81190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 812868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) for (ContentSettingViews::const_reverse_iterator i( 813868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content_setting_views_.rbegin()); i != content_setting_views_.rend(); 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++i) { 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((*i)->visible()) { 81690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) trailing_decorations.AddDecoration( 8175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bubble_location_y, bubble_height, false, 0, kItemPadding, 8185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kItemPadding, (*i)); 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 821ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (generated_credit_card_view_->visible()) { 8227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch trailing_decorations.AddDecoration(vertical_edge_thickness(), 8235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu location_height, 824ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch generated_credit_card_view_); 8257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 8267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (mic_search_view_->visible()) { 8277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch trailing_decorations.AddDecoration(vertical_edge_thickness(), 8285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu location_height, mic_search_view_); 8297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 8307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Because IMEs may eat the tab key, we don't show "press tab to search" while 8317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // IME composition is in progress. 832cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!keyword.empty() && omnibox_view_->model()->is_keyword_hint() && 833cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) !omnibox_view_->IsImeComposing()) { 834868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) trailing_decorations.AddDecoration(vertical_edge_thickness(), 8355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu location_height, true, 0, kItemPadding, 8365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kItemPadding, keyword_hint_view_); 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (keyword_hint_view_->keyword() != keyword) 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) keyword_hint_view_->SetKeyword(keyword); 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Perform layout. 84290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const int horizontal_edge_thickness = GetHorizontalEdgeThickness(); 843a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int full_width = width() - horizontal_edge_thickness - origin_chip_width; 844a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 845a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const gfx::Size search_button_size(search_button_->GetPreferredSize()); 846a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int search_button_reserved_width = 847a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) search_button_size.width() + kSearchButtonInset; 848a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) full_width -= search_button_->visible() ? 849a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) search_button_reserved_width : horizontal_edge_thickness; 8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int entry_width = full_width; 85190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) leading_decorations.LayoutPass1(&entry_width); 85290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) trailing_decorations.LayoutPass1(&entry_width); 85390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) leading_decorations.LayoutPass2(&entry_width); 85490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) trailing_decorations.LayoutPass2(&entry_width); 8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int location_needed_width = omnibox_view_->GetTextWidth(); 857c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int available_width = entry_width - location_needed_width; 8582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The bounds must be wide enough for all the decorations to fit. 85990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::Rect location_bounds( 860a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) origin_chip_width + horizontal_edge_thickness, vertical_edge_thickness(), 86190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::max(full_width, full_width - entry_width), location_height); 86290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) leading_decorations.LayoutPass3(&location_bounds, &available_width); 86390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) trailing_decorations.LayoutPass3(&location_bounds, &available_width); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 86546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Calculate the animation parameters (see comments on these members in the 86646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // header). We have to do this in Layout, after |origin_chip_view_| is laid 86746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // out, because that may affect the host label offset in the origin chip. 86846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::string16& chip_text(origin_chip_view_->host_label_text()); 86946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // If the chip is clicked, the omnibox text will become the toolbar model's 87046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // formatted URL. We can't ask the omnibox for its current text, because 87146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // while the chip is visible the current text is empty. 87246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) size_t prefix_end = 0; 87346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::string16& omnibox_text( 87446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GetToolbarModel()->GetFormattedURL(&prefix_end)); 87546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Do a case-insensitive search to better match cases like 87646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // "Settings" <-> "chrome://settings". Skip any pre-hostname text. 87746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) size_t chip_text_offset = std::search( 87846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_text.begin() + prefix_end, omnibox_text.end(), 87946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chip_text.begin(), chip_text.end(), 88046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::CaseInsensitiveCompare<base::char16>()) - omnibox_text.begin(); 88146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // If we couldn't find the chip text, try checking whether the omnibox text 88246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // starts with it, as is true for e.g. file: URLs. 88346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if ((chip_text_offset >= omnibox_text.length()) && 88446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) StartsWith(omnibox_text, chip_text, true)) 88546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chip_text_offset = 0; 88646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const gfx::FontList& font_list = omnibox_view_->GetFontList(); 88746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const int chip_text_width = gfx::GetStringWidth(chip_text, font_list); 88846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const int old_starting_offset = starting_omnibox_offset_; 88946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const int old_starting_leading_inset = starting_omnibox_leading_inset_; 89046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const int old_ending_width = ending_omnibox_width_; 89146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) starting_omnibox_offset_ = current_omnibox_offset_ = 0; 89246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) starting_omnibox_leading_inset_ = current_omnibox_leading_inset_ = 0; 89346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ending_omnibox_width_ = gfx::GetStringWidth(omnibox_text, font_list); 89446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (chip_text_offset < omnibox_text.length()) { 89546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (base::i18n::IsRTL()) 89646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chip_text_offset += chip_text.length(); 89746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::string16 extra_omnibox_text(base::i18n::IsRTL() ? 89846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_text.substr(chip_text_offset) : 89946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_text.substr(0, chip_text_offset)); 90046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) starting_omnibox_leading_inset_ = 90146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::GetStringWidth(extra_omnibox_text, font_list); 90246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) starting_omnibox_offset_ = origin_chip_view_->HostLabelOffset() - 90346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) starting_omnibox_leading_inset_; 90446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_width_ = chip_text_width; 90546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 90646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // If the chip text wasn't found in the omnibox text, then instead of 90746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // starting the show animation clipped to the "hostname", we'll start with 90846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // the entire omnibox text visible, clipped to the remaining chip width, and 90946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // only animate any necessary expansion of that width, without moving the 91046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // omnibox bounds. 91146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_width_ = origin_chip_view_->WidthFromStartOfLabels(); 91246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 91346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 91446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // End the animations immediately if the parameters have changed. 91546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if ((starting_omnibox_offset_ != old_starting_offset) || 91646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (starting_omnibox_leading_inset_ != old_starting_leading_inset) || 91746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (ending_omnibox_width_ != old_ending_width)) 91846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EndOriginChipAnimations(true); 91946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 92046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Also end the animations immediately if there's nothing to animate (but do 92146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // allow the chip to fade back in). 92246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const ui::NativeTheme* native_theme = GetNativeTheme(); 92346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const SkColor ending_selection_text_color = native_theme->GetSystemColor( 92446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::NativeTheme::kColorId_TextfieldSelectionColor); 92546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const SkColor ending_selection_background_color = 92646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) native_theme->GetSystemColor( 92746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ui::NativeTheme::kColorId_TextfieldSelectionBackgroundFocused); 92846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if ((starting_omnibox_offset_ == 0) && 92946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (starting_omnibox_leading_inset_ == 0) && 93046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (ending_omnibox_width_ == chip_text_width) && 93146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (hide_url_animation_->is_animating() || 93246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ((ending_selection_text_color == 93346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->pressed_text_color()) && 93446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (ending_selection_background_color == 93546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->pressed_background_color())))) 93646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EndOriginChipAnimations(false); 93746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 93846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (show_url_animation_->is_animating()) { 93946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_view_->SetSelectionTextColor(gfx::Tween::ColorValueBetween( 94046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->GetCurrentValue(), 94146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->pressed_text_color(), 94246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ending_selection_text_color)); 94346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_view_->SetSelectionBackgroundColor(gfx::Tween::ColorValueBetween( 94446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->GetCurrentValue(), 94546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->pressed_background_color(), 94646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ending_selection_background_color)); 94746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_offset_ = 94846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->CurrentValueBetween(starting_omnibox_offset_, 0); 94946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_leading_inset_ = show_url_animation_->CurrentValueBetween( 95046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) starting_omnibox_leading_inset_, 0); 95146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_width_ = show_url_animation_->CurrentValueBetween( 95246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chip_text_width, ending_omnibox_width_); 95346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else if (hide_url_animation_->is_animating()) { 95446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_offset_ = 95546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->CurrentValueBetween(0, starting_omnibox_offset_); 95646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_leading_inset_ = hide_url_animation_->CurrentValueBetween( 95746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 0, starting_omnibox_leading_inset_); 95846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) current_omnibox_width_ = hide_url_animation_->CurrentValueBetween( 95946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ending_omnibox_width_, chip_text_width); 96046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 96146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Contract |available_width| as necessary, but never expand it. This way, 96246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // we'll never draw suggested text at first and then have it disappear 96346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // midway through the animation. 96446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (current_omnibox_offset_ > 0) 96546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) available_width -= current_omnibox_offset_; 96646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) location_bounds.Inset(current_omnibox_offset_, 0, 0, 0); 96746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Layout out the suggested text view right aligned to the location 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // entry. Only show the suggested text if we can fit the text from one 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // character before the end of the selection to the end of the text and the 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // suggested text. If we can't it means either the suggested text is too big, 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // or the user has scrolled. 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(sky): We could potentially adjust this to take into account suggested 9752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // text to force using minimum size if necessary, but currently the chance of 9762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // showing keyword hints and suggested text is minimal and we're not confident 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // this is the right approach for suggested text. 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 979f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int omnibox_view_margin = 0; 98090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (suggested_text_view_->visible()) { 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We do not display the suggested text when it contains a mix of RTL and 9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // LTR characters since this could mean the suggestion should be displayed 9832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // in the middle of the string. 98490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::i18n::TextDirection text_direction = 985f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::i18n::GetStringDirection(omnibox_view_->GetText()); 98690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (text_direction != 98790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::i18n::GetStringDirection(suggested_text_view_->text())) 98890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) text_direction = base::i18n::UNKNOWN_DIRECTION; 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(sky): need to layout when the user changes caret position. 99190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::Size suggested_text_size(suggested_text_view_->GetPreferredSize()); 99290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (suggested_text_size.width() > available_width || 9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) text_direction == base::i18n::UNKNOWN_DIRECTION) { 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hide the suggested text if the user has scrolled or we can't fit all 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the suggested text, or we have a mix of RTL and LTR characters. 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggested_text_view_->SetBounds(0, 0, 0, 0); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) location_needed_width = 9992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::min(location_needed_width, 100090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) location_bounds.width() - suggested_text_size.width()); 10010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) gfx::Rect suggested_text_bounds(location_bounds.x(), location_bounds.y(), 10020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) suggested_text_size.width(), 10030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) location_bounds.height()); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(sky): figure out why this needs the -1. 100590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) suggested_text_bounds.Offset(location_needed_width - 1, 0); 10062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We reverse the order of the location entry and suggested text if: 10082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // - Chrome is RTL but the text is fully LTR, or 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // - Chrome is LTR but the text is fully RTL. 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This ensures the suggested text is correctly displayed to the right 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (or left) of the user text. 101290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (text_direction == (base::i18n::IsRTL() ? 101390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::i18n::LEFT_TO_RIGHT : base::i18n::RIGHT_TO_LEFT)) { 10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(sky): Figure out why we need the +1. 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) suggested_text_bounds.set_x(location_bounds.x() + 1); 1016f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Use a margin to prevent omnibox text from overlapping suggest text. 1017f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_margin = suggested_text_bounds.width(); 10182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) suggested_text_view_->SetBoundsRect(suggested_text_bounds); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::Insets insets = omnibox_view_->GetInsets(); 10245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) omnibox_view_->SetBorder(views::Border::CreateEmptyBorder( 10255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) insets.top(), insets.left(), insets.bottom(), omnibox_view_margin)); 1026c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1027868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Layout |ime_inline_autocomplete_view_| next to the user input. 1028868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (ime_inline_autocomplete_view_->visible()) { 1029868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int width = 10305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::GetStringWidth(ime_inline_autocomplete_view_->text(), 10315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ime_inline_autocomplete_view_->font_list()) + 1032868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->GetInsets().width(); 1033868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // All the target languages (IMEs) are LTR, and we do not need to support 1034868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // RTL so far. In other words, no testable RTL environment so far. 1035868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int x = location_needed_width; 1036868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (width > entry_width) 1037868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) x = 0; 1038868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) else if (location_needed_width + width > entry_width) 1039868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) x = entry_width - width; 1040868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) location_bounds.set_width(x); 1041868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ime_inline_autocomplete_view_->SetBounds( 1042868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) location_bounds.right(), location_bounds.y(), 10430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::min(width, entry_width), location_bounds.height()); 1044868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 1045868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1046f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_->SetBoundsRect(location_bounds); 1047a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1048a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) search_button_->SetBoundsRect(gfx::Rect( 1049a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gfx::Point(width() - search_button_reserved_width, 0), 1050a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) search_button_size)); 1051a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 1052a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1053c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1054c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, public OmniboxEditController implementation: 10557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 10564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void LocationBarView::Update(const WebContents* contents) { 10574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mic_search_view_->SetVisible( 10584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) !GetToolbarModel()->input_in_progress() && browser_ && 10594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) browser_->search_model()->voice_search_supported()); 1060f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RefreshContentSettingViews(); 10614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) generated_credit_card_view_->Update(); 10624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ZoomBubbleView::CloseBubble(); 10634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RefreshZoomView(); 10644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RefreshPageActionViews(); 10651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) RefreshTranslateIcon(); 1066f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RefreshManagePasswordsIconView(); 1067f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::WebContents* web_contents_for_sub_views = 1068f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetToolbarModel()->input_in_progress() ? NULL : GetWebContents(); 1069f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) open_pdf_in_reader_view_->Update(web_contents_for_sub_views); 1070f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) add_to_app_launcher_view_->Update(web_contents_for_sub_views); 10714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 10725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (star_view_) { 10735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) star_view_->SetVisible( 10745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser_defaults::bookmarks_enabled && !is_popup_mode_ && 10755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !GetToolbarModel()->input_in_progress() && 10765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) edit_bookmarks_enabled_.GetValue() && 10775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) !IsBookmarkStarHiddenByExtension()); 10785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 10794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 10804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (contents) 1081f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_->OnTabChanged(contents); 10824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) else 1083f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_->Update(); 10844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 10854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) OnChanged(); // NOTE: Calls Layout(). 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1088effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid LocationBarView::ShowURL() { 108946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Start the animation before calling ShowURL(), since the latter eventually 109046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // calls back to Layout(), and if the animation is not marked as "running", 109146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // we'll draw the omnibox in its final position briefly until the first 109246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // animation callback reaches us. 1093cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (chrome::ShouldDisplayOriginChip()) { 109446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // If we're currently hiding, reverse the hide by swapping to the show 109546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // animation, offset so that the text is in the same position. 109646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (hide_url_animation_->is_animating()) { 109746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const double show_value = GetValueForAnimation(false); 109846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->Reset(); 109946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->Show(); 110046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // This must be done after calling Show() and is not equivalent to 110146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // calling Reset(n) before Show(); Reset() would have caused the entire 110246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // animation curve (and time) to run between this value and the final 110346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // value, whereas Show() + SetCurrentValue() skips the animation forward 110446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // to the supplied value. 110546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->SetCurrentValue(show_value); 110646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 110746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->Show(); 110846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 1109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 111046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_view_->ShowURL(); 111146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 111246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 111346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void LocationBarView::EndOriginChipAnimations(bool cancel_fade) { 111446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->End(); 111546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->End(); 111646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (cancel_fade) 111746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->CancelFade(); 1118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 1119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochToolbarModel* LocationBarView::GetToolbarModel() { 1121c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return delegate_->GetToolbarModel(); 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)WebContents* LocationBarView::GetWebContents() { 11252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return delegate_->GetWebContents(); 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private: 11303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static 1132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)int LocationBarView::IncrementalMinimumWidth(views::View* view) { 1133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return view->visible() ? (kItemPadding + view->GetMinimumSize().width()) : 0; 1134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint LocationBarView::GetHorizontalEdgeThickness() const { 1137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // In maximized popup mode, there isn't any edge. 1138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return (is_popup_mode_ && browser_ && browser_->window() && 1139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch browser_->window()->IsMaximized()) ? 0 : vertical_edge_thickness(); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool LocationBarView::RefreshContentSettingViews() { 1143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool visibility_changed = false; 1144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (ContentSettingViews::const_iterator i(content_setting_views_.begin()); 1145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch i != content_setting_views_.end(); ++i) { 1146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const bool was_visible = (*i)->visible(); 1147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch (*i)->Update(GetToolbarModel()->input_in_progress() ? 1148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch NULL : GetWebContents()); 1149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (was_visible != (*i)->visible()) 1150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch visibility_changed = true; 1151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1152c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return visibility_changed; 1153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 1154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1155c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::DeletePageActionViews() { 1156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (PageActionViews::const_iterator i(page_action_views_.begin()); 1157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch i != page_action_views_.end(); ++i) 1158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch RemoveChildView(*i); 1159c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch STLDeleteElements(&page_action_views_); 1160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 116158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool LocationBarView::RefreshPageActionViews() { 1163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (is_popup_mode_) 1164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1166c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool changed = false; 116758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Remember the previous visibility of the page actions so that we can 1169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // notify when this changes. 1170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::map<ExtensionAction*, bool> old_visibility; 1171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (PageActionViews::const_iterator i(page_action_views_.begin()); 1172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch i != page_action_views_.end(); ++i) { 1173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch old_visibility[(*i)->image_view()->page_action()] = (*i)->visible(); 117458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 11755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PageActions new_page_actions; 11772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu WebContents* web_contents = GetWebContents(); 11795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (web_contents) { 1180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch extensions::TabHelper* extensions_tab_helper = 11815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu extensions::TabHelper::FromWebContents(web_contents); 1182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch extensions::LocationBarController* controller = 1183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch extensions_tab_helper->location_bar_controller(); 1184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new_page_actions = controller->GetCurrentActions(); 1185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 1186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // On startup we sometimes haven't loaded any extensions. This makes sure 1188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // we catch up when the extensions (and any page actions) load. 1189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (page_actions_ != new_page_actions) { 1190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch changed = true; 11917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch page_actions_.swap(new_page_actions); 1193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DeletePageActionViews(); // Delete the old views (if any). 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Create the page action views. 1196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (PageActions::const_iterator i = page_actions_.begin(); 1197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch i != page_actions_.end(); ++i) { 1198c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PageActionWithBadgeView* page_action_view = new PageActionWithBadgeView( 1199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delegate_->CreatePageActionImageView(this, *i)); 1200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch page_action_view->SetVisible(false); 1201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch page_action_views_.push_back(page_action_view); 1202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Move rightmost extensions to the start. 1205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::stable_partition( 1206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch page_action_views_.begin(), 1207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch page_action_views_.end(), 1208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch IsPageActionViewRightAligned( 1209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch extensions::ExtensionSystem::Get(profile())->extension_service())); 1210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch View* right_anchor = open_pdf_in_reader_view_; 1212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!right_anchor) 1213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch right_anchor = star_view_; 1214c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK(right_anchor); 1215c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1216c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // |page_action_views_| are ordered right-to-left. Add them as children in 1217c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // reverse order so the logical order and visual order match for 1218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // accessibility purposes. 1219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (PageActionViews::reverse_iterator i = page_action_views_.rbegin(); 1220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch i != page_action_views_.rend(); ++i) 1221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch AddChildViewAt(*i, GetIndexOf(right_anchor)); 1222c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1223c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 12245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!page_action_views_.empty() && web_contents) { 12255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 1226c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GURL url = browser->tab_strip_model()->GetActiveWebContents()->GetURL(); 1227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch for (PageActionViews::const_iterator i(page_action_views_.begin()); 1229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch i != page_action_views_.end(); ++i) { 1230c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch (*i)->UpdateVisibility( 12315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetToolbarModel()->input_in_progress() ? NULL : web_contents, url); 1232c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1233c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Check if the visibility of the action changed and notify if it did. 1234c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionAction* action = (*i)->image_view()->page_action(); 1235c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (old_visibility.find(action) == old_visibility.end() || 1236c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch old_visibility[action] != (*i)->visible()) { 1237c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch changed = true; 1238c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::NotificationService::current()->Notify( 1239c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED, 1240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::Source<ExtensionAction>(action), 12415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::Details<WebContents>(web_contents)); 1242c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1243c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1244c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1245c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return changed; 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1248c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool LocationBarView::RefreshZoomView() { 1249c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK(zoom_view_); 1250c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebContents* web_contents = GetWebContents(); 1251c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!web_contents) 1252c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 1253c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const bool was_visible = zoom_view_->visible(); 1254c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch zoom_view_->Update(ZoomController::FromWebContents(web_contents)); 1255c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return was_visible != zoom_view_->visible(); 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1258c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::RefreshTranslateIcon() { 1259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!TranslateService::IsTranslateBubbleEnabled()) 1260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return; 1261c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1262c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebContents* web_contents = GetWebContents(); 1263c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!web_contents) 1264c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return; 126546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) LanguageState& language_state = 126646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ChromeTranslateClient::FromWebContents(web_contents)->GetLanguageState(); 1267c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool enabled = language_state.translate_enabled(); 1268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch command_updater()->UpdateCommandEnabled(IDC_TRANSLATE_PAGE, enabled); 1269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch translate_icon_view_->SetVisible(enabled); 1270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch translate_icon_view_->SetToggled(language_state.IsPageTranslated()); 1271c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1273c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool LocationBarView::RefreshManagePasswordsIconView() { 1274c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK(manage_passwords_icon_view_); 1275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebContents* web_contents = GetWebContents(); 1276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!web_contents) 1277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 1278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const bool was_visible = manage_passwords_icon_view_->visible(); 1279010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ManagePasswordsUIController::FromWebContents( 12805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu web_contents)->UpdateIconAndBubbleState(manage_passwords_icon_view_); 1281c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return was_visible != manage_passwords_icon_view_->visible(); 1282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1283c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1284c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::ShowFirstRunBubbleInternal() { 1285c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // First run bubble doesn't make sense for Chrome OS. 1286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if !defined(OS_CHROMEOS) 1287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) WebContents* web_contents = delegate_->GetWebContents(); 1288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!web_contents) 1289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 1290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 1291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (browser) 1292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) FirstRunBubble::ShowBubble(browser, location_icon_view_); 1293c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif 1294c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1295c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1296c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::AccessibilitySetValue(const base::string16& new_value) { 1297c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch omnibox_view_->SetUserText(new_value, new_value, true); 1298c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1299c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1300c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool LocationBarView::HasValidSuggestText() const { 1301c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return suggested_text_view_->visible() && 1302c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch !suggested_text_view_->size().IsEmpty(); 1303c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1304c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool LocationBarView::ShouldShowKeywordBubble() const { 1306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return !omnibox_view_->model()->keyword().empty() && 1307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) !omnibox_view_->model()->is_keyword_hint(); 1308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool LocationBarView::ShouldShowEVBubble() const { 1311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return !chrome::ShouldDisplayOriginChip() && 1312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) (GetToolbarModel()->GetSecurityLevel(false) == ToolbarModel::EV_SECURE); 1313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 131546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)double LocationBarView::GetValueForAnimation(bool hide) const { 131646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int calculated_offset; 131746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const gfx::Tween::Type tween_type = hide ? kHideTweenType : kShowTweenType; 131846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int start_offset = starting_omnibox_offset_, end_offset = 0; 131946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (hide) 132046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::swap(start_offset, end_offset); 132146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const int desired_offset = abs(current_omnibox_offset_); 132246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Binary-search the value space (0 <= value <= 1) to find the appropriate 132346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // position. We only bother to iterate to within 1/64 of the desired value, 132446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // because the longer of the two animations will only run for twelve frames 132546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // anyway (200 ms * 60 Hz), so at this point we'll have a maximum error of 132646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // less than a fifth of an animation frame, which the user isn't going to 132746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // notice. 132846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // 132946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // We have to use this method because Tween::CalculateValue() is not 133046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // necessarily easily invertible. Luckily, this only runs when the user 133146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // reverses the animation (rare), and the limit on how many iterations we'll 133246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // do ensures the cost is unnoticeable. 133346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) double value = 0.5; 133446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) double step = value / 2; 133546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) do { 133646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) calculated_offset = abs(gfx::Tween::IntValueBetween( 133746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Tween::CalculateValue(tween_type, value), start_offset, 133846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) end_offset)); 133946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (calculated_offset < desired_offset) 134046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) value += step; 134146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) else if (calculated_offset > desired_offset) 134246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) value -= step; 134346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) step /= 2; 134446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } while ((calculated_offset != desired_offset) && (step >= (1.0 / 64))); 134546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return value; 134646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 134746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 134846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void LocationBarView::ResetShowAnimationAndColors() { 134946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) show_url_animation_->Reset(); 135046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_view_->UseDefaultSelectionTextColor(); 135146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_view_->UseDefaultSelectionBackgroundColor(); 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1355c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private LocationBar implementation: 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LocationBarView::ShowFirstRunBubble() { 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait until search engines have loaded to show the first run bubble. 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLService* url_service = 13605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TemplateURLServiceFactory::GetForProfile(profile()); 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url_service->loaded()) { 13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template_url_service_ = url_service; 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template_url_service_->AddObserver(this); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) template_url_service_->Load(); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowFirstRunBubbleInternal(); 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL LocationBarView::GetDestinationURL() const { 13714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return destination_url(); 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WindowOpenDisposition LocationBarView::GetWindowOpenDisposition() const { 13754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return disposition(); 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::PageTransition LocationBarView::GetPageTransition() const { 13794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return transition(); 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LocationBarView::AcceptInput() { 1383f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_->model()->AcceptInput(CURRENT_TAB, false); 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LocationBarView::FocusSearch() { 1387f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_->SetFocus(); 1388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) omnibox_view_->SetForcedQuery(); 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1391c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::UpdateContentSettingsIcons() { 1392c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (RefreshContentSettingViews()) { 1393c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Layout(); 1394c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SchedulePaint(); 1395c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1398c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::UpdateManagePasswordsIconAndBubble() { 1399c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (RefreshManagePasswordsIconView()) { 1400c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Layout(); 1401c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SchedulePaint(); 1402c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::UpdatePageActions() { 1406c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch size_t count_before = page_action_views_.size(); 1407c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool changed = RefreshPageActionViews(); 1408c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (page_action_views_.size() != count_before) { 1409c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::NotificationService::current()->Notify( 1410c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_COUNT_CHANGED, 1411c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::Source<LocationBar>(this), 1412c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::NotificationService::NoDetails()); 1413c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1414c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1415c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (changed) { 1416c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Layout(); 1417c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SchedulePaint(); 1418c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1421c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::InvalidatePageActions() { 1422c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch size_t count_before = page_action_views_.size(); 1423c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DeletePageActionViews(); 1424c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (page_action_views_.size() != count_before) { 1425c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::NotificationService::current()->Notify( 1426c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_COUNT_CHANGED, 1427c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::Source<LocationBar>(this), 1428c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content::NotificationService::NoDetails()); 1429c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1430c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1431c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1432c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::UpdateOpenPDFInReaderPrompt() { 1433c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch open_pdf_in_reader_view_->Update( 1434c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetToolbarModel()->input_in_progress() ? NULL : GetWebContents()); 1435c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Layout(); 1436c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SchedulePaint(); 1437c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1438c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1439c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::UpdateGeneratedCreditCardView() { 1440c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch generated_credit_card_view_->Update(); 1441c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Layout(); 1442c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SchedulePaint(); 1443c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1444c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1445c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::SaveStateToContents(WebContents* contents) { 144646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // If we're about to switch tabs, complete any current animations, so that if 144746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // the user is in the midst of hiding the URL, when he returns to this tab, 144846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // the URL will be hidden rather than shown. 144946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // NOTE: This must be called before SaveStateToTab(). 145046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EndOriginChipAnimations(true); 1451c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch omnibox_view_->SaveStateToTab(contents); 1452c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1453c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1454c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst OmniboxView* LocationBarView::GetOmniboxView() const { 1455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return omnibox_view_; 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)LocationBarTesting* LocationBarView::GetLocationBarForTesting() { 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this; 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1462c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1463c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private LocationBarTesting implementation: 1464c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int LocationBarView::PageActionCount() { 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return page_action_views_.size(); 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int LocationBarView::PageActionVisibleCount() { 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = 0; 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < page_action_views_.size(); i++) { 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_action_views_[i]->visible()) 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++result; 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionAction* LocationBarView::GetPageAction(size_t index) { 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (index < page_action_views_.size()) 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return page_action_views_[index]->image_view()->page_action(); 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionAction* LocationBarView::GetVisiblePageAction(size_t index) { 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t current = 0; 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < page_action_views_.size(); ++i) { 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_action_views_[i]->visible()) { 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (current == index) 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return page_action_views_[i]->image_view()->page_action(); 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++current; 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void LocationBarView::TestPageActionPressed(size_t index) { 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t current = 0; 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < page_action_views_.size(); ++i) { 15045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_action_views_[i]->visible()) { 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (current == index) { 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_action_views_[i]->image_view()->ExecuteAction( 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPopup::SHOW); 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++current; 15115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool LocationBarView::GetBookmarkStarVisibility() { 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(star_view_); 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return star_view_->visible(); 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1522c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1523c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private views::View implementation: 1524c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1525c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst char* LocationBarView::GetClassName() const { 1526c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return kViewClassName; 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1529c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::OnBoundsChanged(const gfx::Rect& previous_bounds) { 1530c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch InstantServiceFactory::GetForProfile(profile())->OnOmniboxStartMarginChanged( 1531c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bounds().x()); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1533c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch OmniboxPopupView* popup = omnibox_view_->model()->popup_model()->view(); 1534c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (popup->IsOpen()) 1535c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch popup->UpdatePopupAppearance(); 1536c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 15375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 153846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void LocationBarView::OnFocus() { 153946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Explicitly focus the omnibox so a focus ring will be displayed around it on 154046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Windows. 154146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_view_->SetFocus(); 154246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 154346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1544c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::OnPaint(gfx::Canvas* canvas) { 1545c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch View::OnPaint(canvas); 1546c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1547c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Fill the location bar background color behind the border. Parts of the 1548c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // border images are meant to rest atop the toolbar background and parts atop 1549c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the omnibox background, so we can't just blindly fill our entire bounds. 1550c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::Rect bounds(GetContentsBounds()); 1551c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bounds.Inset(GetHorizontalEdgeThickness(), vertical_edge_thickness()); 1552c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SkColor color(GetColor(ToolbarModel::NONE, BACKGROUND)); 1553c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (is_popup_mode_) { 1554c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch canvas->FillRect(bounds, color); 1555c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 1556c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SkPaint paint; 1557c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch paint.setStyle(SkPaint::kFill_Style); 1558c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch paint.setColor(color); 1559c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const int kBorderCornerRadius = 2; 1560c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch canvas->DrawRoundRect(bounds, kBorderCornerRadius, paint); 15617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 1562c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1563c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The border itself will be drawn in PaintChildren() since it includes an 1564c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // inner shadow which should be drawn over the contents. 15657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 15667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1567cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void LocationBarView::PaintChildren(gfx::Canvas* canvas, 1568cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const views::CullSet& cull_set) { 156946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Paint all the children except for the omnibox itself, which may need to be 157046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // clipped if it's animating in, and the origin chip and the search button, 1571c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // which will be painted after the border. 15720de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) for (int i = 0, count = child_count(); i < count; ++i) { 157346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::View* child = child_at(i); 157446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!child->layer() && (child != omnibox_view_) && 157546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (child != origin_chip_view_) && (child != search_button_)) 157646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) child->Paint(canvas, cull_set); 157746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 157846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 157946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) { 158046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::ScopedCanvas scoped_canvas(canvas); 158146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (show_url_animation_->is_animating() || 158246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->is_animating()) { 158346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Rect clip_rect(omnibox_view_->bounds()); 158446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) clip_rect.Inset(current_omnibox_leading_inset_, 0, 0, 0); 158546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) clip_rect.set_width(current_omnibox_width_); 158646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) clip_rect.set_x(GetMirroredXForRect(clip_rect)); 158746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) canvas->ClipRect(clip_rect); 158846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 158946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_view_->Paint(canvas, cull_set); 15900de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles) } 1591c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1592c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // For non-InstantExtendedAPI cases, if necessary, show focus rect. As we need 1593c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // the focus rect to appear on top of children we paint here rather than 1594c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // OnPaint(). 1595c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Note: |Canvas::DrawFocusRect| paints a dashed rect with gray color. 1596c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (show_focus_rect_ && HasFocus()) 1597c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch canvas->DrawFocusRect(omnibox_view_->bounds()); 1598c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1599c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Maximized popup windows don't draw the horizontal edges. We implement this 1600c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // by simply expanding the paint area outside the view by the edge thickness. 1601c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::Rect border_rect(GetContentsBounds()); 1602c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (is_popup_mode_ && (GetHorizontalEdgeThickness() == 0)) 1603c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch border_rect.Inset(-kPopupEdgeThickness, 0); 1604c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::Painter::PaintPainterAt(canvas, border_painter_.get(), border_rect); 1605c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1606c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The origin chip and the search button must be painted after the border so 1607c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // that the border shadow is not drawn over them. 1608cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) origin_chip_view_->Paint(canvas, cull_set); 1609cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) search_button_->Paint(canvas, cull_set); 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 161258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//////////////////////////////////////////////////////////////////////////////// 1613c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private views::ButtonListener implementation: 161458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1615c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::ButtonPressed(views::Button* sender, 1616c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const ui::Event& event) { 1617c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (sender == mic_search_view_) { 1618c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch command_updater()->ExecuteCommand(IDC_TOGGLE_SPEECH_INPUT); 1619c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return; 1620c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1621c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1622c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK_EQ(search_button_, sender); 1623c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // TODO(pkasting): When macourteau adds UMA stats for this, wire them up here. 1624c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch omnibox_view_->model()->AcceptInput( 1625c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ui::DispositionFromEventFlags(event.flags()), false); 162658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 162758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1628c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1629c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private views::DragController implementation: 1630c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1631c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::WriteDragDataForView(views::View* sender, 1632c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Point& press_pt, 1633c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch OSExchangeData* data) { 1634c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK_NE(GetDragOperationsForView(sender, press_pt), 1635c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ui::DragDropTypes::DRAG_NONE); 1636c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1637c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebContents* web_contents = GetWebContents(); 1638c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FaviconTabHelper* favicon_tab_helper = 1639c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FaviconTabHelper::FromWebContents(web_contents); 1640c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::ImageSkia favicon = favicon_tab_helper->GetFavicon().AsImageSkia(); 1641c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch button_drag_utils::SetURLAndDragImage(web_contents->GetURL(), 1642c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch web_contents->GetTitle(), 1643c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch favicon, 1644f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NULL, 1645c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch data, 1646c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch sender->GetWidget()); 164758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 164858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1649c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochint LocationBarView::GetDragOperationsForView(views::View* sender, 1650c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Point& p) { 1651c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK((sender == location_icon_view_) || (sender == ev_bubble_view_) || 1652c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch (sender == origin_chip_view_)); 1653c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch WebContents* web_contents = delegate_->GetWebContents(); 1654c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return (web_contents && web_contents->GetURL().is_valid() && 1655c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch (!GetOmniboxView()->IsEditingOrEmpty() || 1656c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch sender == origin_chip_view_)) ? 1657c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch (ui::DragDropTypes::DRAG_COPY | ui::DragDropTypes::DRAG_LINK) : 1658c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ui::DragDropTypes::DRAG_NONE; 165958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 166058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1661c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool LocationBarView::CanStartDragForView(View* sender, 1662c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Point& press_pt, 1663c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Point& p) { 1664c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 166558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 166658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1667c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1668c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private OmniboxEditController implementation: 1669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1670c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::OnChanged() { 1671c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int icon_id = omnibox_view_->GetIcon(); 1672c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch location_icon_view_->SetImage(GetThemeProvider()->GetImageSkiaNamed(icon_id)); 1673c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch location_icon_view_->ShowTooltip(!GetOmniboxView()->IsEditingOrEmpty()); 167458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1675c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ToolbarModel* toolbar_model = GetToolbarModel(); 1676c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch chrome::DisplaySearchButtonConditions conditions = 1677c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch chrome::GetDisplaySearchButtonConditions(); 1678c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool meets_conditions = 1679c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch (conditions == chrome::DISPLAY_SEARCH_BUTTON_ALWAYS) || 1680c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ((conditions != chrome::DISPLAY_SEARCH_BUTTON_NEVER) && 1681c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch (toolbar_model->WouldPerformSearchTermReplacement(true) || 1682c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ((conditions == chrome::DISPLAY_SEARCH_BUTTON_FOR_STR_OR_IIP) && 1683c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch toolbar_model->input_in_progress()))); 1684c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch search_button_->SetVisible(!is_popup_mode_ && meets_conditions); 1685f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) search_button_->UpdateIcon(icon_id == IDR_OMNIBOX_SEARCH); 168658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 168746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->OnChanged(); 168858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1689c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Layout(); 1690c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SchedulePaint(); 1691c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 1692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1693c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::OnSetFocus() { 1694c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetFocusManager()->SetFocusedView(this); 1695c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 169658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1697c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochInstantController* LocationBarView::GetInstant() { 1698c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return delegate_->GetInstant(); 1699c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 17005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1701c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst ToolbarModel* LocationBarView::GetToolbarModel() const { 1702c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return delegate_->GetToolbarModel(); 1703c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 17045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1705c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::HideURL() { 170646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(chrome::ShouldDisplayOriginChip()); 170746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 170846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // If we're currently showing, reverse the hide by swapping to the hide 170946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // animation, offset so that the text is in the same position. 171046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (show_url_animation_->is_animating()) { 171146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const double hide_value = GetValueForAnimation(true); 171246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ResetShowAnimationAndColors(); 171346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->Show(); 171446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // This must be done after calling Show() and is not equivalent to Reset(n); 171546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // see comments in ShowURL(). 171646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->SetCurrentValue(hide_value); 171746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 171846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) hide_url_animation_->Show(); 171946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 1720c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 172158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1722c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1723c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private DropdownBarHostDelegate implementation: 172458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1725c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::SetFocusAndSelection(bool select_all) { 1726c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FocusLocation(select_all); 1727c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 172858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1729c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::SetAnimationOffset(int offset) { 1730c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch dropdown_animation_offset_ = offset; 1731c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 173258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1733c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1734c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private gfx::AnimationDelegate implementation: 1735c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1736c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::AnimationProgressed(const gfx::Animation* animation) { 173746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK((animation == show_url_animation_.get()) || 173846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) (animation == hide_url_animation_.get())); 173946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Layout(); 174046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SchedulePaint(); 174158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 174258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1743c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::AnimationEnded(const gfx::Animation* animation) { 1744c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (animation == show_url_animation_.get()) { 174546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ResetShowAnimationAndColors(); 174646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Layout(); 174746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SchedulePaint(); 174846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 174946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DCHECK(animation == hide_url_animation_.get()); 1750c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch hide_url_animation_->Reset(); 175146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) origin_chip_view_->FadeIn(); 175246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) omnibox_view_->HideURL(); // Calls OnChanged(), triggering layout. 1753c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 175558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1756c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1757c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private TemplateURLServiceObserver implementation: 1758c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1759c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::OnTemplateURLServiceChanged() { 1760c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch template_url_service_->RemoveObserver(this); 1761c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch template_url_service_ = NULL; 1762c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // If the browser is no longer active, let's not show the info bubble, as this 1763c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // would make the browser the active window again. 1764c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (omnibox_view_ && omnibox_view_->GetWidget()->IsActive()) 1765c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ShowFirstRunBubble(); 176658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 176758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1768c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1769c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private content::NotificationObserver implementation: 17705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1771c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::Observe(int type, 1772c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const content::NotificationSource& source, 1773c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const content::NotificationDetails& details) { 1774c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch switch (type) { 17750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: 1776c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: 1777c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Update(NULL); 1778c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch break; 177958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1780c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch default: 1781c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch NOTREACHED() << "Unexpected notification."; 1782c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 178458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1785c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch//////////////////////////////////////////////////////////////////////////////// 1786c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// LocationBarView, private SearchModelObserver implementation: 178758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1788c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid LocationBarView::ModelChanged(const SearchModel::State& old_state, 1789c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const SearchModel::State& new_state) { 1790c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const bool visible = !GetToolbarModel()->input_in_progress() && 1791c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new_state.voice_search_supported; 1792c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (mic_search_view_->visible() != visible) { 1793c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mic_search_view_->SetVisible(visible); 1794c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Layout(); 1795c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 179658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 179758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1798