| OLD | NEW |
| 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" |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 // DropdownBarHostDelegate | 487 // DropdownBarHostDelegate |
| 488 void LocationBarView::SetFocusAndSelection(bool select_all) { | 488 void LocationBarView::SetFocusAndSelection(bool select_all) { |
| 489 FocusLocation(select_all); | 489 FocusLocation(select_all); |
| 490 } | 490 } |
| 491 | 491 |
| 492 void LocationBarView::SetAnimationOffset(int offset) { | 492 void LocationBarView::SetAnimationOffset(int offset) { |
| 493 animation_offset_ = offset; | 493 animation_offset_ = offset; |
| 494 } | 494 } |
| 495 | 495 |
| 496 void LocationBarView::UpdateContentSettingsIcons() { | 496 void LocationBarView::UpdateContentSettingsIcons() { |
| 497 RefreshContentSettingViews(); | 497 if (RefreshContentSettingViews()) { |
| 498 Layout(); | 498 Layout(); |
| 499 SchedulePaint(); | 499 SchedulePaint(); |
| 500 } |
| 500 } | 501 } |
| 501 | 502 |
| 502 void LocationBarView::UpdateManagePasswordsIconAndBubble() { | 503 void LocationBarView::UpdateManagePasswordsIconAndBubble() { |
| 503 RefreshManagePasswordsIconView(); | 504 if (RefreshManagePasswordsIconView()) { |
| 504 Layout(); | 505 Layout(); |
| 505 SchedulePaint(); | 506 SchedulePaint(); |
| 507 } |
| 506 ShowManagePasswordsBubbleIfNeeded(); | 508 ShowManagePasswordsBubbleIfNeeded(); |
| 507 } | 509 } |
| 508 | 510 |
| 509 void LocationBarView::UpdatePageActions() { | 511 void LocationBarView::UpdatePageActions() { |
| 510 size_t count_before = page_action_views_.size(); | 512 size_t count_before = page_action_views_.size(); |
| 511 RefreshPageActionViews(); | 513 bool changed = RefreshPageActionViews(); |
| 512 RefreshScriptBubble(); | 514 changed |= RefreshScriptBubble(); |
| 513 if (page_action_views_.size() != count_before) { | 515 if (page_action_views_.size() != count_before) { |
| 514 content::NotificationService::current()->Notify( | 516 content::NotificationService::current()->Notify( |
| 515 chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_COUNT_CHANGED, | 517 chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_COUNT_CHANGED, |
| 516 content::Source<LocationBar>(this), | 518 content::Source<LocationBar>(this), |
| 517 content::NotificationService::NoDetails()); | 519 content::NotificationService::NoDetails()); |
| 518 } | 520 } |
| 519 | 521 |
| 520 Layout(); | 522 if (changed) { |
| 521 SchedulePaint(); | 523 Layout(); |
| 524 SchedulePaint(); |
| 525 } |
| 522 } | 526 } |
| 523 | 527 |
| 524 void LocationBarView::InvalidatePageActions() { | 528 void LocationBarView::InvalidatePageActions() { |
| 525 size_t count_before = page_action_views_.size(); | 529 size_t count_before = page_action_views_.size(); |
| 526 DeletePageActionViews(); | 530 DeletePageActionViews(); |
| 527 if (page_action_views_.size() != count_before) { | 531 if (page_action_views_.size() != count_before) { |
| 528 content::NotificationService::current()->Notify( | 532 content::NotificationService::current()->Notify( |
| 529 chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_COUNT_CHANGED, | 533 chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_COUNT_CHANGED, |
| 530 content::Source<LocationBar>(this), | 534 content::Source<LocationBar>(this), |
| 531 content::NotificationService::NoDetails()); | 535 content::NotificationService::NoDetails()); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 star_view_->SetToggled(on); | 597 star_view_->SetToggled(on); |
| 594 } | 598 } |
| 595 | 599 |
| 596 void LocationBarView::ShowBookmarkPrompt() { | 600 void LocationBarView::ShowBookmarkPrompt() { |
| 597 if (star_view_ && star_view_->visible()) | 601 if (star_view_ && star_view_->visible()) |
| 598 BookmarkPromptView::ShowPrompt(star_view_, profile_->GetPrefs()); | 602 BookmarkPromptView::ShowPrompt(star_view_, profile_->GetPrefs()); |
| 599 } | 603 } |
| 600 | 604 |
| 601 void LocationBarView::ZoomChangedForActiveTab(bool can_show_bubble) { | 605 void LocationBarView::ZoomChangedForActiveTab(bool can_show_bubble) { |
| 602 DCHECK(zoom_view_); | 606 DCHECK(zoom_view_); |
| 603 RefreshZoomView(); | 607 if (RefreshZoomView()) { |
| 604 | 608 Layout(); |
| 605 Layout(); | 609 SchedulePaint(); |
| 606 SchedulePaint(); | 610 } |
| 607 | 611 |
| 608 if (can_show_bubble && zoom_view_->visible() && delegate_->GetWebContents()) | 612 if (can_show_bubble && zoom_view_->visible() && delegate_->GetWebContents()) |
| 609 ZoomBubbleView::ShowBubble(delegate_->GetWebContents(), true); | 613 ZoomBubbleView::ShowBubble(delegate_->GetWebContents(), true); |
| 610 } | 614 } |
| 611 | 615 |
| 612 gfx::Point LocationBarView::GetLocationEntryOrigin() const { | 616 gfx::Point LocationBarView::GetLocationEntryOrigin() const { |
| 613 gfx::Point origin(location_entry_view_->bounds().origin()); | 617 gfx::Point origin(location_entry_view_->bounds().origin()); |
| 614 // If the UI layout is RTL, the coordinate system is not transformed and | 618 // If the UI layout is RTL, the coordinate system is not transformed and |
| 615 // therefore we need to adjust the X coordinate so that bubble appears on the | 619 // therefore we need to adjust the X coordinate so that bubble appears on the |
| 616 // right hand side of the location bar. | 620 // right hand side of the location bar. |
| (...skipping 730 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1347 return (ui::GetDisplayLayout() == ui::LAYOUT_TOUCH) ? | 1351 return (ui::GetDisplayLayout() == ui::LAYOUT_TOUCH) ? |
| 1348 GetItemPadding() / 2 : 0; | 1352 GetItemPadding() / 2 : 0; |
| 1349 } | 1353 } |
| 1350 | 1354 |
| 1351 int LocationBarView::GetHorizontalEdgeThickness() const { | 1355 int LocationBarView::GetHorizontalEdgeThickness() const { |
| 1352 // In maximized popup mode, there isn't any edge. | 1356 // In maximized popup mode, there isn't any edge. |
| 1353 return (is_popup_mode_ && browser_ && browser_->window() && | 1357 return (is_popup_mode_ && browser_ && browser_->window() && |
| 1354 browser_->window()->IsMaximized()) ? 0 : vertical_edge_thickness(); | 1358 browser_->window()->IsMaximized()) ? 0 : vertical_edge_thickness(); |
| 1355 } | 1359 } |
| 1356 | 1360 |
| 1357 void LocationBarView::RefreshContentSettingViews() { | 1361 bool LocationBarView::RefreshContentSettingViews() { |
| 1362 bool visibility_changed = false; |
| 1358 for (ContentSettingViews::const_iterator i(content_setting_views_.begin()); | 1363 for (ContentSettingViews::const_iterator i(content_setting_views_.begin()); |
| 1359 i != content_setting_views_.end(); ++i) { | 1364 i != content_setting_views_.end(); ++i) { |
| 1365 const bool was_visible = (*i)->visible(); |
| 1360 (*i)->Update(GetToolbarModel()->input_in_progress() ? | 1366 (*i)->Update(GetToolbarModel()->input_in_progress() ? |
| 1361 NULL : GetWebContents()); | 1367 NULL : GetWebContents()); |
| 1368 if (was_visible != (*i)->visible()) |
| 1369 visibility_changed = true; |
| 1362 } | 1370 } |
| 1371 return visibility_changed; |
| 1363 } | 1372 } |
| 1364 | 1373 |
| 1365 void LocationBarView::DeletePageActionViews() { | 1374 void LocationBarView::DeletePageActionViews() { |
| 1366 for (PageActionViews::const_iterator i(page_action_views_.begin()); | 1375 for (PageActionViews::const_iterator i(page_action_views_.begin()); |
| 1367 i != page_action_views_.end(); ++i) | 1376 i != page_action_views_.end(); ++i) |
| 1368 RemoveChildView(*i); | 1377 RemoveChildView(*i); |
| 1369 STLDeleteElements(&page_action_views_); | 1378 STLDeleteElements(&page_action_views_); |
| 1370 } | 1379 } |
| 1371 | 1380 |
| 1372 void LocationBarView::RefreshPageActionViews() { | 1381 bool LocationBarView::RefreshPageActionViews() { |
| 1373 if (is_popup_mode_) | 1382 if (is_popup_mode_) |
| 1374 return; | 1383 return false; |
| 1384 |
| 1385 bool changed = false; |
| 1375 | 1386 |
| 1376 // Remember the previous visibility of the page actions so that we can | 1387 // Remember the previous visibility of the page actions so that we can |
| 1377 // notify when this changes. | 1388 // notify when this changes. |
| 1378 std::map<ExtensionAction*, bool> old_visibility; | 1389 std::map<ExtensionAction*, bool> old_visibility; |
| 1379 for (PageActionViews::const_iterator i(page_action_views_.begin()); | 1390 for (PageActionViews::const_iterator i(page_action_views_.begin()); |
| 1380 i != page_action_views_.end(); ++i) { | 1391 i != page_action_views_.end(); ++i) { |
| 1381 old_visibility[(*i)->image_view()->page_action()] = (*i)->visible(); | 1392 old_visibility[(*i)->image_view()->page_action()] = (*i)->visible(); |
| 1382 } | 1393 } |
| 1383 | 1394 |
| 1384 std::vector<ExtensionAction*> new_page_actions; | 1395 std::vector<ExtensionAction*> new_page_actions; |
| 1385 | 1396 |
| 1386 WebContents* contents = delegate_->GetWebContents(); | 1397 WebContents* contents = delegate_->GetWebContents(); |
| 1387 if (contents) { | 1398 if (contents) { |
| 1388 extensions::TabHelper* extensions_tab_helper = | 1399 extensions::TabHelper* extensions_tab_helper = |
| 1389 extensions::TabHelper::FromWebContents(contents); | 1400 extensions::TabHelper::FromWebContents(contents); |
| 1390 extensions::LocationBarController* controller = | 1401 extensions::LocationBarController* controller = |
| 1391 extensions_tab_helper->location_bar_controller(); | 1402 extensions_tab_helper->location_bar_controller(); |
| 1392 new_page_actions = controller->GetCurrentActions(); | 1403 new_page_actions = controller->GetCurrentActions(); |
| 1393 } | 1404 } |
| 1394 | 1405 |
| 1395 // On startup we sometimes haven't loaded any extensions. This makes sure | 1406 // On startup we sometimes haven't loaded any extensions. This makes sure |
| 1396 // we catch up when the extensions (and any page actions) load. | 1407 // we catch up when the extensions (and any page actions) load. |
| 1397 if (page_actions_ != new_page_actions) { | 1408 if (page_actions_ != new_page_actions) { |
| 1409 changed = true; |
| 1410 |
| 1398 page_actions_.swap(new_page_actions); | 1411 page_actions_.swap(new_page_actions); |
| 1399 DeletePageActionViews(); // Delete the old views (if any). | 1412 DeletePageActionViews(); // Delete the old views (if any). |
| 1400 | 1413 |
| 1401 page_action_views_.resize(page_actions_.size()); | 1414 page_action_views_.resize(page_actions_.size()); |
| 1402 View* right_anchor = open_pdf_in_reader_view_; | 1415 View* right_anchor = open_pdf_in_reader_view_; |
| 1403 if (!right_anchor) | 1416 if (!right_anchor) |
| 1404 right_anchor = star_view_; | 1417 right_anchor = star_view_; |
| 1405 if (!right_anchor) | 1418 if (!right_anchor) |
| 1406 right_anchor = script_bubble_icon_view_; | 1419 right_anchor = script_bubble_icon_view_; |
| 1407 DCHECK(right_anchor); | 1420 DCHECK(right_anchor); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1422 | 1435 |
| 1423 for (PageActionViews::const_iterator i(page_action_views_.begin()); | 1436 for (PageActionViews::const_iterator i(page_action_views_.begin()); |
| 1424 i != page_action_views_.end(); ++i) { | 1437 i != page_action_views_.end(); ++i) { |
| 1425 (*i)->UpdateVisibility( | 1438 (*i)->UpdateVisibility( |
| 1426 GetToolbarModel()->input_in_progress() ? NULL : contents, url); | 1439 GetToolbarModel()->input_in_progress() ? NULL : contents, url); |
| 1427 | 1440 |
| 1428 // Check if the visibility of the action changed and notify if it did. | 1441 // Check if the visibility of the action changed and notify if it did. |
| 1429 ExtensionAction* action = (*i)->image_view()->page_action(); | 1442 ExtensionAction* action = (*i)->image_view()->page_action(); |
| 1430 if (old_visibility.find(action) == old_visibility.end() || | 1443 if (old_visibility.find(action) == old_visibility.end() || |
| 1431 old_visibility[action] != (*i)->visible()) { | 1444 old_visibility[action] != (*i)->visible()) { |
| 1445 changed = true; |
| 1432 content::NotificationService::current()->Notify( | 1446 content::NotificationService::current()->Notify( |
| 1433 chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED, | 1447 chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED, |
| 1434 content::Source<ExtensionAction>(action), | 1448 content::Source<ExtensionAction>(action), |
| 1435 content::Details<WebContents>(contents)); | 1449 content::Details<WebContents>(contents)); |
| 1436 } | 1450 } |
| 1437 } | 1451 } |
| 1438 } | 1452 } |
| 1453 return changed; |
| 1439 } | 1454 } |
| 1440 | 1455 |
| 1441 size_t LocationBarView::ScriptBubbleScriptsRunning() { | 1456 size_t LocationBarView::ScriptBubbleScriptsRunning() { |
| 1442 WebContents* contents = delegate_->GetWebContents(); | 1457 WebContents* contents = delegate_->GetWebContents(); |
| 1443 if (!contents) | 1458 if (!contents) |
| 1444 return false; | 1459 return false; |
| 1445 extensions::TabHelper* extensions_tab_helper = | 1460 extensions::TabHelper* extensions_tab_helper = |
| 1446 extensions::TabHelper::FromWebContents(contents); | 1461 extensions::TabHelper::FromWebContents(contents); |
| 1447 if (!extensions_tab_helper) | 1462 if (!extensions_tab_helper) |
| 1448 return false; | 1463 return false; |
| 1449 extensions::ScriptBubbleController* script_bubble_controller = | 1464 extensions::ScriptBubbleController* script_bubble_controller = |
| 1450 extensions_tab_helper->script_bubble_controller(); | 1465 extensions_tab_helper->script_bubble_controller(); |
| 1451 if (!script_bubble_controller) | 1466 if (!script_bubble_controller) |
| 1452 return false; | 1467 return false; |
| 1453 size_t script_count = | 1468 size_t script_count = |
| 1454 script_bubble_controller->extensions_running_scripts().size(); | 1469 script_bubble_controller->extensions_running_scripts().size(); |
| 1455 return script_count; | 1470 return script_count; |
| 1456 } | 1471 } |
| 1457 | 1472 |
| 1458 void LocationBarView::RefreshScriptBubble() { | 1473 bool LocationBarView::RefreshScriptBubble() { |
| 1459 if (!script_bubble_icon_view_) | 1474 if (!script_bubble_icon_view_) |
| 1460 return; | 1475 return false; |
| 1461 size_t script_count = ScriptBubbleScriptsRunning(); | 1476 size_t script_count = ScriptBubbleScriptsRunning(); |
| 1477 const bool was_visible = script_bubble_icon_view_->visible(); |
| 1462 script_bubble_icon_view_->SetVisible(script_count > 0); | 1478 script_bubble_icon_view_->SetVisible(script_count > 0); |
| 1463 if (script_count > 0) | 1479 if (script_count > 0) |
| 1464 script_bubble_icon_view_->SetScriptCount(script_count); | 1480 script_bubble_icon_view_->SetScriptCount(script_count); |
| 1481 return was_visible != script_bubble_icon_view_->visible(); |
| 1465 } | 1482 } |
| 1466 | 1483 |
| 1467 void LocationBarView::RefreshZoomView() { | 1484 bool LocationBarView::RefreshZoomView() { |
| 1468 DCHECK(zoom_view_); | 1485 DCHECK(zoom_view_); |
| 1469 WebContents* web_contents = GetWebContents(); | 1486 WebContents* web_contents = GetWebContents(); |
| 1470 if (!web_contents) | 1487 if (!web_contents) |
| 1471 return; | 1488 return false; |
| 1489 const bool was_visible = zoom_view_->visible(); |
| 1472 zoom_view_->Update(ZoomController::FromWebContents(web_contents)); | 1490 zoom_view_->Update(ZoomController::FromWebContents(web_contents)); |
| 1491 return was_visible != zoom_view_->visible(); |
| 1473 } | 1492 } |
| 1474 | 1493 |
| 1475 void LocationBarView::RefreshManagePasswordsIconView() { | 1494 bool LocationBarView::RefreshManagePasswordsIconView() { |
| 1476 DCHECK(manage_passwords_icon_view_); | 1495 DCHECK(manage_passwords_icon_view_); |
| 1477 WebContents* web_contents = GetWebContents(); | 1496 WebContents* web_contents = GetWebContents(); |
| 1478 if (!web_contents) | 1497 if (!web_contents) |
| 1479 return; | 1498 return false; |
| 1499 const bool was_visible = manage_passwords_icon_view_->visible(); |
| 1480 manage_passwords_icon_view_->Update( | 1500 manage_passwords_icon_view_->Update( |
| 1481 ManagePasswordsIconController::FromWebContents(web_contents)); | 1501 ManagePasswordsIconController::FromWebContents(web_contents)); |
| 1502 return was_visible != manage_passwords_icon_view_->visible(); |
| 1482 } | 1503 } |
| 1483 | 1504 |
| 1484 void LocationBarView::RefreshTranslateIcon() { | 1505 void LocationBarView::RefreshTranslateIcon() { |
| 1485 WebContents* web_contents = GetWebContents(); | 1506 WebContents* web_contents = GetWebContents(); |
| 1486 if (!web_contents || !CommandLine::ForCurrentProcess()->HasSwitch( | 1507 if (!web_contents || !CommandLine::ForCurrentProcess()->HasSwitch( |
| 1487 switches::kEnableTranslateNewUX)) | 1508 switches::kEnableTranslateNewUX)) |
| 1488 return; | 1509 return; |
| 1489 bool enabled = TranslateTabHelper::FromWebContents( | 1510 bool enabled = TranslateTabHelper::FromWebContents( |
| 1490 web_contents)->language_state().translate_enabled(); | 1511 web_contents)->language_state().translate_enabled(); |
| 1491 command_updater()->UpdateCommandEnabled(IDC_TRANSLATE_PAGE, enabled); | 1512 command_updater()->UpdateCommandEnabled(IDC_TRANSLATE_PAGE, enabled); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1558 bounds.Inset(-(horizontal_padding + 1) / 2, 0); | 1579 bounds.Inset(-(horizontal_padding + 1) / 2, 0); |
| 1559 location_bar_util::PaintExtensionActionBackground( | 1580 location_bar_util::PaintExtensionActionBackground( |
| 1560 *(*page_action_view)->image_view()->page_action(), | 1581 *(*page_action_view)->image_view()->page_action(), |
| 1561 tab_id, canvas, bounds, text_color, background_color); | 1582 tab_id, canvas, bounds, text_color, background_color); |
| 1562 } | 1583 } |
| 1563 } | 1584 } |
| 1564 | 1585 |
| 1565 void LocationBarView::AccessibilitySetValue(const string16& new_value) { | 1586 void LocationBarView::AccessibilitySetValue(const string16& new_value) { |
| 1566 location_entry_->SetUserText(new_value); | 1587 location_entry_->SetUserText(new_value); |
| 1567 } | 1588 } |
| OLD | NEW |