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

Side by Side Diff: chrome/browser/ui/views/website_settings/website_settings_popup_view.cc

Issue 1372453002: Avoid a race condition in the Origin Info Bubble UI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: A proper fix. Created 5 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/website_settings/website_settings_popup_view.h " 5 #include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h "
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 width = std::max(width, permissions_content_->GetPreferredSize().width()); 467 width = std::max(width, permissions_content_->GetPreferredSize().width());
468 if (header_) 468 if (header_)
469 width = std::max(width, header_->GetPreferredNameWidth()); 469 width = std::max(width, header_->GetPreferredNameWidth());
470 width += kPermissionsSectionPaddingLeft + kPermissionsSectionPaddingRight; 470 width += kPermissionsSectionPaddingLeft + kPermissionsSectionPaddingRight;
471 width = std::min(width, kMaxPopupWidth); 471 width = std::min(width, kMaxPopupWidth);
472 return gfx::Size(width, height); 472 return gfx::Size(width, height);
473 } 473 }
474 474
475 void WebsiteSettingsPopupView::SetCookieInfo( 475 void WebsiteSettingsPopupView::SetCookieInfo(
476 const CookieInfoList& cookie_info_list) { 476 const CookieInfoList& cookie_info_list) {
477 site_data_content_->RemoveAllChildViews(true);
478
479 views::GridLayout* layout = new views::GridLayout(site_data_content_);
480 site_data_content_->SetLayoutManager(layout);
481
482 const int site_data_content_column = 0;
483 views::ColumnSet* column_set =
484 layout->AddColumnSet(site_data_content_column);
485 column_set->AddColumn(views::GridLayout::FILL,
486 views::GridLayout::FILL,
487 1,
488 views::GridLayout::FIXED,
489 kSiteDataIconColumnWidth,
490 0);
491 column_set->AddPaddingColumn(0, kIconMarginLeft);
492 column_set->AddColumn(views::GridLayout::FILL,
493 views::GridLayout::FILL,
494 1,
495 views::GridLayout::USE_PREF,
496 0,
497 0);
498 // No padding. This third column is for |third_party_label_text| (see below),
499 // and the text needs to flow naturally from the |first_party_label_text|
500 // link.
501 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
502 views::GridLayout::USE_PREF, 0, 0);
503
504 layout->AddPaddingRow(1, 5);
505
506 // |cookie_info_list| should only ever have 2 items: first- and third-party 477 // |cookie_info_list| should only ever have 2 items: first- and third-party
507 // cookies. 478 // cookies.
508 DCHECK_EQ(cookie_info_list.size(), 2u); 479 DCHECK_EQ(cookie_info_list.size(), 2u);
509 base::string16 first_party_label_text; 480 base::string16 first_party_label_text;
510 base::string16 third_party_label_text; 481 base::string16 third_party_label_text;
511 for (const auto& i : cookie_info_list) { 482 for (const auto& i : cookie_info_list) {
512 if (i.is_first_party) { 483 if (i.is_first_party) {
513 first_party_label_text = 484 first_party_label_text =
514 l10n_util::GetStringFUTF16(IDS_WEBSITE_SETTINGS_FIRST_PARTY_SITE_DATA, 485 l10n_util::GetStringFUTF16(IDS_WEBSITE_SETTINGS_FIRST_PARTY_SITE_DATA,
515 base::IntToString16(i.allowed)); 486 base::IntToString16(i.allowed));
516 } else { 487 } else {
517 third_party_label_text = 488 third_party_label_text =
518 l10n_util::GetStringFUTF16(IDS_WEBSITE_SETTINGS_THIRD_PARTY_SITE_DATA, 489 l10n_util::GetStringFUTF16(IDS_WEBSITE_SETTINGS_THIRD_PARTY_SITE_DATA,
519 base::IntToString16(i.allowed)); 490 base::IntToString16(i.allowed));
520 } 491 }
521 } 492 }
522 493
523 cookie_dialog_link_ = new views::Link(first_party_label_text); 494 if (!cookie_dialog_link_) {
524 cookie_dialog_link_->set_listener(this); 495 cookie_dialog_link_ = new views::Link(first_party_label_text);
496 cookie_dialog_link_->set_listener(this);
497 } else {
498 cookie_dialog_link_->SetText(first_party_label_text);
felt 2015/09/28 20:47:40 So this has the effect of updating the text, even
palmer 2015/09/28 21:02:51 That's right. Previously, we blew away all the chi
499 }
525 500
526 layout->StartRow(1, site_data_content_column); 501 views::GridLayout* layout =
527 WebsiteSettingsUI::PermissionInfo info; 502 static_cast<views::GridLayout*>(site_data_content_->GetLayoutManager());
528 info.type = CONTENT_SETTINGS_TYPE_COOKIES; 503 if (!layout) {
529 info.setting = CONTENT_SETTING_ALLOW; 504 layout = new views::GridLayout(site_data_content_);
530 views::ImageView* icon = new views::ImageView(); 505 site_data_content_->SetLayoutManager(layout);
531 const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(info);
532 icon->SetImage(image.ToImageSkia());
533 layout->AddView(icon, 1, 1, views::GridLayout::CENTER,
534 views::GridLayout::CENTER);
535 layout->AddView(cookie_dialog_link_, 1, 1, views::GridLayout::CENTER,
536 views::GridLayout::CENTER);
537 base::string16 comma = base::ASCIIToUTF16(", ");
538 506
539 layout->AddView(new views::Label(comma + third_party_label_text), 1, 1, 507 const int site_data_content_column = 0;
540 views::GridLayout::LEADING, views::GridLayout::CENTER); 508 views::ColumnSet* column_set =
509 layout->AddColumnSet(site_data_content_column);
510 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
511 views::GridLayout::FIXED, kSiteDataIconColumnWidth,
512 0);
513 column_set->AddPaddingColumn(0, kIconMarginLeft);
514 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
515 views::GridLayout::USE_PREF, 0, 0);
516 // No padding. This third column is for |third_party_label_text| (see
517 // below),
518 // and the text needs to flow naturally from the |first_party_label_text|
519 // link.
520 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
521 views::GridLayout::USE_PREF, 0, 0);
541 522
542 layout->AddPaddingRow(1, 6); 523 layout->AddPaddingRow(1, 5);
524
525 layout->StartRow(1, site_data_content_column);
526 WebsiteSettingsUI::PermissionInfo info;
527 info.type = CONTENT_SETTINGS_TYPE_COOKIES;
528 info.setting = CONTENT_SETTING_ALLOW;
529 views::ImageView* icon = new views::ImageView();
530 const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(info);
531 icon->SetImage(image.ToImageSkia());
532 layout->AddView(icon, 1, 1, views::GridLayout::CENTER,
533 views::GridLayout::CENTER);
534 layout->AddView(cookie_dialog_link_, 1, 1, views::GridLayout::CENTER,
535 views::GridLayout::CENTER);
536 base::string16 comma = base::ASCIIToUTF16(", ");
537
538 layout->AddView(new views::Label(comma + third_party_label_text), 1, 1,
539 views::GridLayout::LEADING, views::GridLayout::CENTER);
540
541 layout->AddPaddingRow(1, 6);
542 }
543 543
544 layout->Layout(site_data_content_); 544 layout->Layout(site_data_content_);
545 SizeToContents(); 545 SizeToContents();
546 } 546 }
547 547
548 void WebsiteSettingsPopupView::SetPermissionInfo( 548 void WebsiteSettingsPopupView::SetPermissionInfo(
549 const PermissionInfoList& permission_info_list) { 549 const PermissionInfoList& permission_info_list) {
550 // When a permission is changed, WebsiteSettings::OnSitePermissionChanged() 550 // When a permission is changed, WebsiteSettings::OnSitePermissionChanged()
551 // calls this method with updated permissions. However, PermissionSelectorView 551 // calls this method with updated permissions. However, PermissionSelectorView
552 // will have already updated its state, so it's already reflected in the UI. 552 // will have already updated its state, so it's already reflected in the UI.
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 // desktop we should link to that here, too. 861 // desktop we should link to that here, too.
862 web_contents_->OpenURL(content::OpenURLParams( 862 web_contents_->OpenURL(content::OpenURLParams(
863 GURL(chrome::kChromeUIContentSettingsURL), content::Referrer(), 863 GURL(chrome::kChromeUIContentSettingsURL), content::Referrer(),
864 NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, false)); 864 NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, false));
865 presenter_->RecordWebsiteSettingsAction( 865 presenter_->RecordWebsiteSettingsAction(
866 WebsiteSettings::WEBSITE_SETTINGS_SITE_SETTINGS_OPENED); 866 WebsiteSettings::WEBSITE_SETTINGS_SITE_SETTINGS_OPENED);
867 } else { 867 } else {
868 NOTREACHED(); 868 NOTREACHED();
869 } 869 }
870 } 870 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698