Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(835)

Side by Side Diff: chrome/browser/ui/views/location_bar/location_bar_view.cc

Issue 431173002: Create ExtensionActionView class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" 5 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/i18n/rtl.h" 11 #include "base/i18n/rtl.h"
12 #include "base/prefs/pref_service.h" 12 #include "base/prefs/pref_service.h"
13 #include "base/stl_util.h" 13 #include "base/stl_util.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "chrome/app/chrome_command_ids.h" 15 #include "chrome/app/chrome_command_ids.h"
16 #include "chrome/browser/chrome_notification_types.h" 16 #include "chrome/browser/chrome_notification_types.h"
17 #include "chrome/browser/command_updater.h" 17 #include "chrome/browser/command_updater.h"
18 #include "chrome/browser/defaults.h" 18 #include "chrome/browser/defaults.h"
19 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h" 19 #include "chrome/browser/extensions/api/omnibox/omnibox_api.h"
20 #include "chrome/browser/extensions/extension_service.h" 20 #include "chrome/browser/extensions/extension_action.h"
21 #include "chrome/browser/extensions/location_bar_controller.h" 21 #include "chrome/browser/extensions/location_bar_controller.h"
22 #include "chrome/browser/extensions/tab_helper.h" 22 #include "chrome/browser/extensions/tab_helper.h"
23 #include "chrome/browser/favicon/favicon_tab_helper.h" 23 #include "chrome/browser/favicon/favicon_tab_helper.h"
24 #include "chrome/browser/profiles/profile.h" 24 #include "chrome/browser/profiles/profile.h"
25 #include "chrome/browser/search/instant_service.h" 25 #include "chrome/browser/search/instant_service.h"
26 #include "chrome/browser/search/instant_service_factory.h" 26 #include "chrome/browser/search/instant_service_factory.h"
27 #include "chrome/browser/search/search.h" 27 #include "chrome/browser/search/search.h"
28 #include "chrome/browser/search_engines/template_url_service_factory.h" 28 #include "chrome/browser/search_engines/template_url_service_factory.h"
29 #include "chrome/browser/translate/chrome_translate_client.h" 29 #include "chrome/browser/translate/chrome_translate_client.h"
30 #include "chrome/browser/translate/translate_service.h" 30 #include "chrome/browser/translate/translate_service.h"
(...skipping 29 matching lines...) Expand all
60 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_view.h" 60 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_view.h"
61 #include "chrome/browser/ui/zoom/zoom_controller.h" 61 #include "chrome/browser/ui/zoom/zoom_controller.h"
62 #include "chrome/common/chrome_switches.h" 62 #include "chrome/common/chrome_switches.h"
63 #include "chrome/common/pref_names.h" 63 #include "chrome/common/pref_names.h"
64 #include "components/search_engines/template_url.h" 64 #include "components/search_engines/template_url.h"
65 #include "components/search_engines/template_url_service.h" 65 #include "components/search_engines/template_url_service.h"
66 #include "components/translate/core/browser/language_state.h" 66 #include "components/translate/core/browser/language_state.h"
67 #include "content/public/browser/notification_service.h" 67 #include "content/public/browser/notification_service.h"
68 #include "content/public/browser/render_widget_host_view.h" 68 #include "content/public/browser/render_widget_host_view.h"
69 #include "content/public/browser/web_contents.h" 69 #include "content/public/browser/web_contents.h"
70 #include "extensions/browser/extension_system.h" 70 #include "extensions/browser/extension_registry.h"
71 #include "extensions/common/feature_switch.h" 71 #include "extensions/common/feature_switch.h"
72 #include "extensions/common/permissions/permissions_data.h" 72 #include "extensions/common/permissions/permissions_data.h"
73 #include "grit/component_scaled_resources.h" 73 #include "grit/component_scaled_resources.h"
74 #include "grit/generated_resources.h" 74 #include "grit/generated_resources.h"
75 #include "grit/theme_resources.h" 75 #include "grit/theme_resources.h"
76 #include "ui/accessibility/ax_view_state.h" 76 #include "ui/accessibility/ax_view_state.h"
77 #include "ui/base/dragdrop/drag_drop_types.h" 77 #include "ui/base/dragdrop/drag_drop_types.h"
78 #include "ui/base/l10n/l10n_util.h" 78 #include "ui/base/l10n/l10n_util.h"
79 #include "ui/base/resource/resource_bundle.h" 79 #include "ui/base/resource/resource_bundle.h"
80 #include "ui/base/theme_provider.h" 80 #include "ui/base/theme_provider.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 160
161 int GetEditLeadingInternalSpace() { 161 int GetEditLeadingInternalSpace() {
162 // The textfield has 1 px of whitespace before the text in the RTL case only. 162 // The textfield has 1 px of whitespace before the text in the RTL case only.
163 return base::i18n::IsRTL() ? 1 : 0; 163 return base::i18n::IsRTL() ? 1 : 0;
164 } 164 }
165 165
166 // Functor for moving BookmarkManagerPrivate page actions to the right via 166 // Functor for moving BookmarkManagerPrivate page actions to the right via
167 // stable_partition. 167 // stable_partition.
168 class IsPageActionViewRightAligned { 168 class IsPageActionViewRightAligned {
169 public: 169 public:
170 explicit IsPageActionViewRightAligned(ExtensionService* extension_service) 170 explicit IsPageActionViewRightAligned(
171 : extension_service_(extension_service) {} 171 extensions::ExtensionRegistry* extension_registry)
172 : extension_registry_(extension_registry) {}
172 173
173 bool operator()(PageActionWithBadgeView* page_action_view) { 174 bool operator()(PageActionWithBadgeView* page_action_view) {
174 return extension_service_ 175 return extension_registry_->enabled_extensions().GetByID(
175 ->GetExtensionById( 176 page_action_view->image_view()->extension_action()->extension_id())->
176 page_action_view->image_view()->page_action()->extension_id(), 177 permissions_data()->
177 false) 178 HasAPIPermission(extensions::APIPermission::kBookmarkManagerPrivate);
178 ->permissions_data()
179 ->HasAPIPermission(extensions::APIPermission::kBookmarkManagerPrivate);
180 } 179 }
181 180
182 private: 181 private:
183 ExtensionService* extension_service_; 182 extensions::ExtensionRegistry* extension_registry_;
184 183
185 // NOTE: Can't DISALLOW_COPY_AND_ASSIGN as we pass this object by value to 184 // NOTE: Can't DISALLOW_COPY_AND_ASSIGN as we pass this object by value to
186 // std::stable_partition(). 185 // std::stable_partition().
187 }; 186 };
188 187
189 } // namespace 188 } // namespace
190 189
191 190
192 // LocationBarView ----------------------------------------------------------- 191 // LocationBarView -----------------------------------------------------------
193 192
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 WebContents* web_contents = GetWebContents(); 501 WebContents* web_contents = GetWebContents();
503 502
504 RefreshPageActionViews(); 503 RefreshPageActionViews();
505 PageActionWithBadgeView* page_action_view = 504 PageActionWithBadgeView* page_action_view =
506 static_cast<PageActionWithBadgeView*>(GetPageActionView(page_action)); 505 static_cast<PageActionWithBadgeView*>(GetPageActionView(page_action));
507 DCHECK(page_action_view); 506 DCHECK(page_action_view);
508 if (!page_action_view) 507 if (!page_action_view)
509 return; 508 return;
510 509
511 page_action_view->image_view()->set_preview_enabled(preview_enabled); 510 page_action_view->image_view()->set_preview_enabled(preview_enabled);
512 page_action_view->UpdateVisibility(web_contents, GetToolbarModel()->GetURL()); 511 page_action_view->UpdateVisibility(web_contents);
513 Layout(); 512 Layout();
514 SchedulePaint(); 513 SchedulePaint();
515 } 514 }
516 515
517 PageActionWithBadgeView* LocationBarView::GetPageActionView( 516 PageActionWithBadgeView* LocationBarView::GetPageActionView(
518 ExtensionAction* page_action) { 517 ExtensionAction* page_action) {
519 DCHECK(page_action); 518 DCHECK(page_action);
520 for (PageActionViews::const_iterator i(page_action_views_.begin()); 519 for (PageActionViews::const_iterator i(page_action_views_.begin());
521 i != page_action_views_.end(); ++i) { 520 i != page_action_views_.end(); ++i) {
522 if ((*i)->image_view()->page_action() == page_action) 521 if ((*i)->image_view()->extension_action() == page_action)
523 return *i; 522 return *i;
524 } 523 }
525 return NULL; 524 return NULL;
526 } 525 }
527 526
528 void LocationBarView::SetStarToggled(bool on) { 527 void LocationBarView::SetStarToggled(bool on) {
529 if (star_view_) 528 if (star_view_)
530 star_view_->SetToggled(on); 529 star_view_->SetToggled(on);
531 } 530 }
532 531
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 if (is_popup_mode_) 1143 if (is_popup_mode_)
1145 return false; 1144 return false;
1146 1145
1147 bool changed = false; 1146 bool changed = false;
1148 1147
1149 // Remember the previous visibility of the page actions so that we can 1148 // Remember the previous visibility of the page actions so that we can
1150 // notify when this changes. 1149 // notify when this changes.
1151 std::map<ExtensionAction*, bool> old_visibility; 1150 std::map<ExtensionAction*, bool> old_visibility;
1152 for (PageActionViews::const_iterator i(page_action_views_.begin()); 1151 for (PageActionViews::const_iterator i(page_action_views_.begin());
1153 i != page_action_views_.end(); ++i) { 1152 i != page_action_views_.end(); ++i) {
1154 old_visibility[(*i)->image_view()->page_action()] = (*i)->visible(); 1153 old_visibility[(*i)->image_view()->extension_action()] = (*i)->visible();
1155 } 1154 }
1156 1155
1157 PageActions new_page_actions; 1156 PageActions new_page_actions;
1158 1157
1159 WebContents* web_contents = GetWebContents(); 1158 WebContents* web_contents = GetWebContents();
1160 if (web_contents) { 1159 if (web_contents) {
1161 extensions::TabHelper* extensions_tab_helper = 1160 extensions::TabHelper* extensions_tab_helper =
1162 extensions::TabHelper::FromWebContents(web_contents); 1161 extensions::TabHelper::FromWebContents(web_contents);
1163 extensions::LocationBarController* controller = 1162 extensions::LocationBarController* controller =
1164 extensions_tab_helper->location_bar_controller(); 1163 extensions_tab_helper->location_bar_controller();
(...skipping 15 matching lines...) Expand all
1180 delegate_->CreatePageActionImageView(this, *i)); 1179 delegate_->CreatePageActionImageView(this, *i));
1181 page_action_view->SetVisible(false); 1180 page_action_view->SetVisible(false);
1182 page_action_views_.push_back(page_action_view); 1181 page_action_views_.push_back(page_action_view);
1183 } 1182 }
1184 1183
1185 // Move rightmost extensions to the start. 1184 // Move rightmost extensions to the start.
1186 std::stable_partition( 1185 std::stable_partition(
1187 page_action_views_.begin(), 1186 page_action_views_.begin(),
1188 page_action_views_.end(), 1187 page_action_views_.end(),
1189 IsPageActionViewRightAligned( 1188 IsPageActionViewRightAligned(
1190 extensions::ExtensionSystem::Get(profile())->extension_service())); 1189 extensions::ExtensionRegistry::Get(profile())));
1191 1190
1192 View* right_anchor = open_pdf_in_reader_view_; 1191 View* right_anchor = open_pdf_in_reader_view_;
1193 if (!right_anchor) 1192 if (!right_anchor)
1194 right_anchor = star_view_; 1193 right_anchor = star_view_;
1195 DCHECK(right_anchor); 1194 DCHECK(right_anchor);
1196 1195
1197 // |page_action_views_| are ordered right-to-left. Add them as children in 1196 // |page_action_views_| are ordered right-to-left. Add them as children in
1198 // reverse order so the logical order and visual order match for 1197 // reverse order so the logical order and visual order match for
1199 // accessibility purposes. 1198 // accessibility purposes.
1200 for (PageActionViews::reverse_iterator i = page_action_views_.rbegin(); 1199 for (PageActionViews::reverse_iterator i = page_action_views_.rbegin();
1201 i != page_action_views_.rend(); ++i) 1200 i != page_action_views_.rend(); ++i)
1202 AddChildViewAt(*i, GetIndexOf(right_anchor)); 1201 AddChildViewAt(*i, GetIndexOf(right_anchor));
1203 } 1202 }
1204 1203
1205 if (!page_action_views_.empty() && web_contents) { 1204 if (!page_action_views_.empty() && web_contents) {
1206 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
1207 GURL url = browser->tab_strip_model()->GetActiveWebContents()->GetURL();
1208
1209 for (PageActionViews::const_iterator i(page_action_views_.begin()); 1205 for (PageActionViews::const_iterator i(page_action_views_.begin());
1210 i != page_action_views_.end(); ++i) { 1206 i != page_action_views_.end(); ++i) {
1211 (*i)->UpdateVisibility( 1207 (*i)->UpdateVisibility(
1212 GetToolbarModel()->input_in_progress() ? NULL : web_contents, url); 1208 GetToolbarModel()->input_in_progress() ? NULL : web_contents);
1213 1209
1214 // Check if the visibility of the action changed and notify if it did. 1210 // Check if the visibility of the action changed and notify if it did.
1215 ExtensionAction* action = (*i)->image_view()->page_action(); 1211 ExtensionAction* action = (*i)->image_view()->extension_action();
1216 if (old_visibility.find(action) == old_visibility.end() || 1212 if (old_visibility.find(action) == old_visibility.end() ||
1217 old_visibility[action] != (*i)->visible()) { 1213 old_visibility[action] != (*i)->visible()) {
1218 changed = true; 1214 changed = true;
1219 content::NotificationService::current()->Notify( 1215 content::NotificationService::current()->Notify(
1220 extensions::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED, 1216 extensions::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED,
1221 content::Source<ExtensionAction>(action), 1217 content::Source<ExtensionAction>(action),
1222 content::Details<WebContents>(web_contents)); 1218 content::Details<WebContents>(web_contents));
1223 } 1219 }
1224 } 1220 }
1225 } 1221 }
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
1447 int result = 0; 1443 int result = 0;
1448 for (size_t i = 0; i < page_action_views_.size(); i++) { 1444 for (size_t i = 0; i < page_action_views_.size(); i++) {
1449 if (page_action_views_[i]->visible()) 1445 if (page_action_views_[i]->visible())
1450 ++result; 1446 ++result;
1451 } 1447 }
1452 return result; 1448 return result;
1453 } 1449 }
1454 1450
1455 ExtensionAction* LocationBarView::GetPageAction(size_t index) { 1451 ExtensionAction* LocationBarView::GetPageAction(size_t index) {
1456 if (index < page_action_views_.size()) 1452 if (index < page_action_views_.size())
1457 return page_action_views_[index]->image_view()->page_action(); 1453 return page_action_views_[index]->image_view()->extension_action();
1458 1454
1459 NOTREACHED(); 1455 NOTREACHED();
1460 return NULL; 1456 return NULL;
1461 } 1457 }
1462 1458
1463 ExtensionAction* LocationBarView::GetVisiblePageAction(size_t index) { 1459 ExtensionAction* LocationBarView::GetVisiblePageAction(size_t index) {
1464 size_t current = 0; 1460 size_t current = 0;
1465 for (size_t i = 0; i < page_action_views_.size(); ++i) { 1461 for (size_t i = 0; i < page_action_views_.size(); ++i) {
1466 if (page_action_views_[i]->visible()) { 1462 if (page_action_views_[i]->visible()) {
1467 if (current == index) 1463 if (current == index)
1468 return page_action_views_[i]->image_view()->page_action(); 1464 return page_action_views_[i]->image_view()->extension_action();
1469 1465
1470 ++current; 1466 ++current;
1471 } 1467 }
1472 } 1468 }
1473 1469
1474 NOTREACHED(); 1470 NOTREACHED();
1475 return NULL; 1471 return NULL;
1476 } 1472 }
1477 1473
1478 void LocationBarView::TestPageActionPressed(size_t index) { 1474 void LocationBarView::TestPageActionPressed(size_t index) {
1479 size_t current = 0; 1475 size_t current = 0;
1480 for (size_t i = 0; i < page_action_views_.size(); ++i) { 1476 for (size_t i = 0; i < page_action_views_.size(); ++i) {
1481 if (page_action_views_[i]->visible()) { 1477 if (page_action_views_[i]->visible()) {
1482 if (current == index) { 1478 if (current == index) {
1483 page_action_views_[i]->image_view()->ExecuteAction( 1479 page_action_views_[i]->image_view()->extension_action_view()->
1484 ExtensionPopup::SHOW); 1480 ExecuteAction(ExtensionPopup::SHOW, true);
1485 return; 1481 return;
1486 } 1482 }
1487 ++current; 1483 ++current;
1488 } 1484 }
1489 } 1485 }
1490 1486
1491 NOTREACHED(); 1487 NOTREACHED();
1492 } 1488 }
1493 1489
1494 bool LocationBarView::GetBookmarkStarVisibility() { 1490 bool LocationBarView::GetBookmarkStarVisibility() {
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 1760
1765 void LocationBarView::ModelChanged(const SearchModel::State& old_state, 1761 void LocationBarView::ModelChanged(const SearchModel::State& old_state,
1766 const SearchModel::State& new_state) { 1762 const SearchModel::State& new_state) {
1767 const bool visible = !GetToolbarModel()->input_in_progress() && 1763 const bool visible = !GetToolbarModel()->input_in_progress() &&
1768 new_state.voice_search_supported; 1764 new_state.voice_search_supported;
1769 if (mic_search_view_->visible() != visible) { 1765 if (mic_search_view_->visible() != visible) {
1770 mic_search_view_->SetVisible(visible); 1766 mic_search_view_->SetVisible(visible);
1771 Layout(); 1767 Layout();
1772 } 1768 }
1773 } 1769 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698