| Index: chrome/browser/views/collected_cookies_win.cc
|
| diff --git a/chrome/browser/views/collected_cookies_win.cc b/chrome/browser/views/collected_cookies_win.cc
|
| index 1a7f4055e56d59e5430fef27f81110be09cb7407..3f25992d838a6b13d0e7f8072314d89f44438a7e 100644
|
| --- a/chrome/browser/views/collected_cookies_win.cc
|
| +++ b/chrome/browser/views/collected_cookies_win.cc
|
| @@ -5,15 +5,23 @@
|
| #include "chrome/browser/views/collected_cookies_win.h"
|
|
|
| #include "app/l10n_util.h"
|
| +#include "app/resource_bundle.h"
|
| #include "chrome/browser/cookies_tree_model.h"
|
| #include "chrome/browser/profile.h"
|
| #include "chrome/browser/tab_contents/tab_contents.h"
|
| #include "chrome/common/notification_service.h"
|
| +#include "gfx/color_utils.h"
|
| #include "grit/generated_resources.h"
|
| #include "grit/locale_settings.h"
|
| -#include "views/controls/label.h"
|
| +#include "grit/theme_resources.h"
|
| +#include "views/box_layout.h"
|
| #include "views/controls/button/native_button.h"
|
| +#include "views/controls/image_view.h"
|
| +#include "views/controls/label.h"
|
| +#include "views/controls/separator.h"
|
| #include "views/standard_layout.h"
|
| +#include "views/widget/root_view.h"
|
| +#include "views/widget/widget_win.h"
|
| #include "views/window/window.h"
|
|
|
| namespace browser {
|
| @@ -27,6 +35,119 @@ void ShowCollectedCookiesDialog(gfx::NativeWindow parent_window,
|
|
|
| } // namespace browser
|
|
|
| +namespace {
|
| +// Spacing between the infobar frame and its contents.
|
| +const int kInfobarVerticalPadding = 3;
|
| +const int kInfobarHorizontalPadding = 8;
|
| +
|
| +// Width of the infobar frame.
|
| +const int kInfobarBorderSize = 1;
|
| +
|
| +// Dimensions of the tree views.
|
| +const int kTreeViewWidth = 400;
|
| +const int kTreeViewHeight = 125;
|
| +
|
| +} // namespace
|
| +
|
| +// A custom view that conditionally displays an infobar.
|
| +class InfobarView : public views::View {
|
| + public:
|
| + InfobarView() {
|
| + content_ = new views::View;
|
| + SkColor border_color = color_utils::GetSysSkColor(COLOR_3DSHADOW);
|
| + views::Border* border = views::Border::CreateSolidBorder(
|
| + kInfobarBorderSize, border_color);
|
| + content_->set_border(border);
|
| +
|
| + ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| + info_image_ = new views::ImageView();
|
| + info_image_->SetImage(rb.GetBitmapNamed(IDR_INFO));
|
| + label_ = new views::Label();
|
| + }
|
| + virtual ~InfobarView() {}
|
| +
|
| + // Update the visibility of the infobar. If |is_visible| is true, a rule for
|
| + // |setting| on |domain_name| was created.
|
| + void UpdateVisibility(bool is_visible,
|
| + ContentSetting setting,
|
| + const std::wstring& domain_name) {
|
| + if (!is_visible) {
|
| + SetVisible(false);
|
| + return;
|
| + }
|
| +
|
| + std::wstring label;
|
| + switch (setting) {
|
| + case CONTENT_SETTING_BLOCK:
|
| + label = l10n_util::GetStringF(
|
| + IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED, domain_name);
|
| + break;
|
| +
|
| + case CONTENT_SETTING_ALLOW:
|
| + label = l10n_util::GetStringF(
|
| + IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED, domain_name);
|
| + break;
|
| +
|
| + case CONTENT_SETTING_SESSION_ONLY:
|
| + label = l10n_util::GetStringF(
|
| + IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED, domain_name);
|
| + break;
|
| +
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + label_->SetText(label);
|
| + content_->Layout();
|
| + SetVisible(true);
|
| + }
|
| +
|
| + private:
|
| + // Initialize contents and layout.
|
| + void Init() {
|
| + AddChildView(content_);
|
| + content_->SetLayoutManager(
|
| + new views::BoxLayout(views::BoxLayout::kHorizontal,
|
| + kInfobarHorizontalPadding,
|
| + kInfobarVerticalPadding,
|
| + kRelatedControlSmallHorizontalSpacing));
|
| + content_->AddChildView(info_image_);
|
| + content_->AddChildView(label_);
|
| + UpdateVisibility(false, CONTENT_SETTING_BLOCK, std::wstring());
|
| + }
|
| +
|
| + // views::View overrides.
|
| + virtual gfx::Size GetPreferredSize() {
|
| + if (!IsVisible())
|
| + return gfx::Size();
|
| +
|
| + // Add space around the banner.
|
| + gfx::Size size(content_->GetPreferredSize());
|
| + size.Enlarge(0, 2 * kRelatedControlVerticalSpacing);
|
| + return size;
|
| + }
|
| +
|
| + virtual void Layout() {
|
| + content_->SetBounds(
|
| + 0, kRelatedControlVerticalSpacing,
|
| + width(), height() - kRelatedControlVerticalSpacing);
|
| + }
|
| +
|
| + virtual void ViewHierarchyChanged(bool is_add,
|
| + views::View* parent,
|
| + views::View* child) {
|
| + if (is_add && child == this)
|
| + Init();
|
| + }
|
| +
|
| + // Holds the info icon image and text label and renders the border.
|
| + views::View* content_;
|
| + // Info icon image.
|
| + views::ImageView* info_image_;
|
| + // The label responsible for rendering the text.
|
| + views::Label* label_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(InfobarView);
|
| +};
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // CollectedCookiesWin, constructor and destructor:
|
| @@ -40,7 +161,8 @@ CollectedCookiesWin::CollectedCookiesWin(gfx::NativeWindow parent_window,
|
| blocked_cookies_tree_(NULL),
|
| block_allowed_button_(NULL),
|
| allow_blocked_button_(NULL),
|
| - for_session_blocked_button_(NULL) {
|
| + for_session_blocked_button_(NULL),
|
| + infobar_(NULL) {
|
| TabSpecificContentSettings* content_settings =
|
| tab_contents->GetTabSpecificContentSettings();
|
| registrar_.Add(this, NotificationType::COLLECTED_COOKIES_SHOWN,
|
| @@ -59,6 +181,8 @@ CollectedCookiesWin::~CollectedCookiesWin() {
|
| void CollectedCookiesWin::Init() {
|
| TabSpecificContentSettings* content_settings =
|
| tab_contents_->GetTabSpecificContentSettings();
|
| + HostContentSettingsMap* host_content_settings_map =
|
| + tab_contents_->profile()->GetHostContentSettingsMap();
|
|
|
| // Allowed Cookie list.
|
| allowed_label_ = new views::Label(
|
| @@ -75,7 +199,12 @@ void CollectedCookiesWin::Init() {
|
|
|
| // Blocked Cookie list.
|
| blocked_label_ = new views::Label(
|
| - l10n_util::GetString(IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL));
|
| + l10n_util::GetString(
|
| + host_content_settings_map->BlockThirdPartyCookies() ?
|
| + IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED :
|
| + IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL));
|
| + blocked_label_->SetMultiLine(true);
|
| + blocked_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
|
| blocked_cookies_tree_model_.reset(
|
| content_settings->GetBlockedCookiesTreeModel());
|
| blocked_cookies_tree_ = new views::TreeView();
|
| @@ -110,7 +239,8 @@ void CollectedCookiesWin::Init() {
|
| layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| layout->StartRow(1, single_column_layout_id);
|
| layout->AddView(
|
| - allowed_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL);
|
| + allowed_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL,
|
| + kTreeViewWidth, kTreeViewHeight);
|
| layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
|
|
| layout->StartRow(0, single_column_layout_id);
|
| @@ -121,12 +251,18 @@ void CollectedCookiesWin::Init() {
|
| layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing);
|
|
|
| layout->StartRow(0, single_column_layout_id);
|
| - layout->AddView(blocked_label_);
|
| + layout->AddView(
|
| + new views::Separator(), 1, 1, GridLayout::FILL, GridLayout::FILL);
|
| + layout->AddPaddingRow(0, kUnrelatedControlVerticalSpacing);
|
| +
|
| + layout->StartRow(0, single_column_layout_id);
|
| + layout->AddView(blocked_label_, 1, 1, GridLayout::FILL, GridLayout::FILL);
|
|
|
| layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
| layout->StartRow(1, single_column_layout_id);
|
| layout->AddView(
|
| - blocked_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL);
|
| + blocked_cookies_tree_, 1, 1, GridLayout::FILL, GridLayout::FILL,
|
| + kTreeViewWidth, kTreeViewHeight);
|
| layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
|
|
|
| layout->StartRow(0, three_columns_layout_id);
|
| @@ -137,6 +273,10 @@ void CollectedCookiesWin::Init() {
|
| this, l10n_util::GetString(IDS_COLLECTED_COOKIES_SESSION_ONLY_BUTTON));
|
| layout->AddView(for_session_blocked_button_);
|
|
|
| + layout->StartRow(0, single_column_layout_id);
|
| + infobar_ = new InfobarView();
|
| + layout->AddView(infobar_, 1, 1, GridLayout::FILL, GridLayout::FILL);
|
| +
|
| EnableControls();
|
| }
|
|
|
| @@ -190,15 +330,6 @@ void CollectedCookiesWin::OnTreeViewSelectionChanged(
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -// views::View implementation.
|
| -
|
| -gfx::Size CollectedCookiesWin::GetPreferredSize() {
|
| - return gfx::Size(views::Window::GetLocalizedContentsSize(
|
| - IDS_COOKIES_DIALOG_WIDTH_CHARS,
|
| - IDS_COOKIES_DIALOG_HEIGHT_LINES));
|
| -}
|
| -
|
| -///////////////////////////////////////////////////////////////////////////////
|
| // CollectedCookiesWin, private methods.
|
|
|
| void CollectedCookiesWin::EnableControls() {
|
| @@ -234,6 +365,17 @@ void CollectedCookiesWin::AddContentException(views::TreeView* tree_view,
|
| static_cast<CookieTreeOriginNode*>(tree_view->GetSelectedNode());
|
| origin_node->CreateContentException(
|
| tab_contents_->profile()->GetHostContentSettingsMap(), setting);
|
| + infobar_->UpdateVisibility(true, setting, origin_node->GetTitle());
|
| + gfx::Rect bounds;
|
| + GetWidget()->GetBounds(&bounds, false);
|
| + // WidgetWin::GetBounds returns the bounds relative to the parent window,
|
| + // while WidgetWin::SetBounds wants screen coordinates. Do the translation
|
| + // here until http://crbug.com/52851 is fixed.
|
| + POINT topleft = {bounds.x(), bounds.y()};
|
| + MapWindowPoints(HWND_DESKTOP, tab_contents_->GetNativeView(), &topleft, 1);
|
| + gfx::Size size = GetRootView()->GetPreferredSize();
|
| + bounds.SetRect(topleft.x, topleft.y, size.width(), size.height());
|
| + GetWidget()->SetBounds(bounds);
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|