summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/content_setting_bubble_contents.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/content_setting_bubble_contents.cc')
-rw-r--r--chrome/browser/views/content_setting_bubble_contents.cc379
1 files changed, 0 insertions, 379 deletions
diff --git a/chrome/browser/views/content_setting_bubble_contents.cc b/chrome/browser/views/content_setting_bubble_contents.cc
deleted file mode 100644
index cea404d..0000000
--- a/chrome/browser/views/content_setting_bubble_contents.cc
+++ /dev/null
@@ -1,379 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/views/content_setting_bubble_contents.h"
-
-#if defined(OS_LINUX)
-#include <gdk/gdk.h>
-#endif
-
-#include "app/l10n_util.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/browser/blocked_content_container.h"
-#include "chrome/browser/content_setting_bubble_model.h"
-#include "chrome/browser/host_content_settings_map.h"
-#include "chrome/browser/plugin_updater.h"
-#include "chrome/browser/profile.h"
-#include "chrome/browser/tab_contents/tab_contents.h"
-#include "chrome/browser/views/browser_dialogs.h"
-#include "chrome/browser/views/info_bubble.h"
-#include "chrome/common/notification_source.h"
-#include "chrome/common/notification_type.h"
-#include "grit/generated_resources.h"
-#include "views/controls/button/native_button.h"
-#include "views/controls/button/radio_button.h"
-#include "views/controls/image_view.h"
-#include "views/controls/label.h"
-#include "views/controls/separator.h"
-#include "views/grid_layout.h"
-#include "views/standard_layout.h"
-#include "webkit/glue/plugins/plugin_list.h"
-
-// If we don't clamp the maximum width, then very long URLs and titles can make
-// the bubble arbitrarily wide.
-const int kMaxContentsWidth = 500;
-
-// When we have multiline labels, we should set a minimum width lest we get very
-// narrow bubbles with lots of line-wrapping.
-const int kMinMultiLineContentsWidth = 250;
-
-class ContentSettingBubbleContents::Favicon : public views::ImageView {
- public:
- Favicon(const SkBitmap& image,
- ContentSettingBubbleContents* parent,
- views::Link* link);
- virtual ~Favicon();
-
- private:
-#if defined(OS_WIN)
- static HCURSOR g_hand_cursor;
-#endif
-
- // views::View overrides:
- virtual bool OnMousePressed(const views::MouseEvent& event);
- virtual void OnMouseReleased(const views::MouseEvent& event, bool canceled);
- virtual gfx::NativeCursor GetCursorForPoint(
- views::Event::EventType event_type,
- const gfx::Point& p);
-
- ContentSettingBubbleContents* parent_;
- views::Link* link_;
-};
-
-#if defined(OS_WIN)
-HCURSOR ContentSettingBubbleContents::Favicon::g_hand_cursor = NULL;
-#endif
-
-ContentSettingBubbleContents::Favicon::Favicon(
- const SkBitmap& image,
- ContentSettingBubbleContents* parent,
- views::Link* link)
- : parent_(parent),
- link_(link) {
- SetImage(image);
-}
-
-ContentSettingBubbleContents::Favicon::~Favicon() {
-}
-
-bool ContentSettingBubbleContents::Favicon::OnMousePressed(
- const views::MouseEvent& event) {
- return event.IsLeftMouseButton() || event.IsMiddleMouseButton();
-}
-
-void ContentSettingBubbleContents::Favicon::OnMouseReleased(
- const views::MouseEvent& event,
- bool canceled) {
- if (!canceled &&
- (event.IsLeftMouseButton() || event.IsMiddleMouseButton()) &&
- HitTest(event.location()))
- parent_->LinkActivated(link_, event.GetFlags());
-}
-
-gfx::NativeCursor ContentSettingBubbleContents::Favicon::GetCursorForPoint(
- views::Event::EventType event_type,
- const gfx::Point& p) {
-#if defined(OS_WIN)
- if (!g_hand_cursor)
- g_hand_cursor = LoadCursor(NULL, IDC_HAND);
- return g_hand_cursor;
-#elif defined(OS_LINUX)
- return gdk_cursor_new(GDK_HAND2);
-#endif
-}
-
-ContentSettingBubbleContents::ContentSettingBubbleContents(
- ContentSettingBubbleModel* content_setting_bubble_model,
- Profile* profile,
- TabContents* tab_contents)
- : content_setting_bubble_model_(content_setting_bubble_model),
- profile_(profile),
- tab_contents_(tab_contents),
- info_bubble_(NULL),
- close_button_(NULL),
- manage_link_(NULL),
- clear_link_(NULL),
- info_link_(NULL),
- load_plugins_link_(NULL) {
- registrar_.Add(this, NotificationType::TAB_CONTENTS_DESTROYED,
- Source<TabContents>(tab_contents));
-}
-
-ContentSettingBubbleContents::~ContentSettingBubbleContents() {
-}
-
-gfx::Size ContentSettingBubbleContents::GetPreferredSize() {
- gfx::Size preferred_size(views::View::GetPreferredSize());
- int preferred_width =
- (!content_setting_bubble_model_->bubble_content().domain_lists.empty() &&
- (kMinMultiLineContentsWidth > preferred_size.width())) ?
- kMinMultiLineContentsWidth : preferred_size.width();
- preferred_size.set_width(std::min(preferred_width, kMaxContentsWidth));
- return preferred_size;
-}
-
-void ContentSettingBubbleContents::ViewHierarchyChanged(bool is_add,
- View* parent,
- View* child) {
- if (is_add && (child == this))
- InitControlLayout();
-}
-
-void ContentSettingBubbleContents::ButtonPressed(views::Button* sender,
- const views::Event& event) {
- if (sender == close_button_) {
- info_bubble_->set_fade_away_on_close(true);
- info_bubble_->Close(); // CAREFUL: This deletes us.
- return;
- }
-
- for (RadioGroup::const_iterator i = radio_group_.begin();
- i != radio_group_.end(); ++i) {
- if (sender == *i) {
- content_setting_bubble_model_->OnRadioClicked(i - radio_group_.begin());
- return;
- }
- }
- NOTREACHED() << "unknown radio";
-}
-
-void ContentSettingBubbleContents::LinkActivated(views::Link* source,
- int event_flags) {
- if (source == manage_link_) {
- info_bubble_->set_fade_away_on_close(true);
- content_setting_bubble_model_->OnManageLinkClicked();
- // CAREFUL: Showing the settings window activates it, which deactivates the
- // info bubble, which causes it to close, which deletes us.
- return;
- }
- if (source == clear_link_) {
- content_setting_bubble_model_->OnClearLinkClicked();
- info_bubble_->set_fade_away_on_close(true);
- info_bubble_->Close(); // CAREFUL: This deletes us.
- return;
- }
- if (source == info_link_) {
- content_setting_bubble_model_->OnInfoLinkClicked();
- info_bubble_->set_fade_away_on_close(true);
- info_bubble_->Close(); // CAREFUL: This deletes us.
- return;
- }
- if (source == load_plugins_link_) {
- content_setting_bubble_model_->OnLoadPluginsLinkClicked();
- info_bubble_->set_fade_away_on_close(true);
- info_bubble_->Close(); // CAREFUL: This deletes us.
- return;
- }
-
- PopupLinks::const_iterator i(popup_links_.find(source));
- DCHECK(i != popup_links_.end());
- content_setting_bubble_model_->OnPopupClicked(i->second);
-}
-
-void ContentSettingBubbleContents::Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- DCHECK(type == NotificationType::TAB_CONTENTS_DESTROYED);
- DCHECK(source == Source<TabContents>(tab_contents_));
- tab_contents_ = NULL;
-}
-
-void ContentSettingBubbleContents::InitControlLayout() {
- using views::GridLayout;
-
- GridLayout* layout = new views::GridLayout(this);
- SetLayoutManager(layout);
-
- const int single_column_set_id = 0;
- views::ColumnSet* column_set = layout->AddColumnSet(single_column_set_id);
- column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1,
- GridLayout::USE_PREF, 0, 0);
-
- const ContentSettingBubbleModel::BubbleContent& bubble_content =
- content_setting_bubble_model_->bubble_content();
-
- if (!bubble_content.title.empty()) {
- views::Label* title_label = new views::Label(UTF8ToWide(
- bubble_content.title));
- layout->StartRow(0, single_column_set_id);
- layout->AddView(title_label);
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- }
-
- const std::set<std::string>& plugins = bubble_content.resource_identifiers;
- if (!plugins.empty()) {
- for (std::set<std::string>::const_iterator it = plugins.begin();
- it != plugins.end(); ++it) {
- std::wstring name;
- NPAPI::PluginList::PluginMap groups;
- NPAPI::PluginList::Singleton()->GetPluginGroups(false, &groups);
- if (groups.find(*it) != groups.end())
- name = UTF16ToWide(groups[*it]->GetGroupName());
- else
- name = UTF8ToWide(*it);
- layout->StartRow(0, single_column_set_id);
- layout->AddView(new views::Label(name));
- }
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- }
-
- if (content_setting_bubble_model_->content_type() ==
- CONTENT_SETTINGS_TYPE_POPUPS) {
- const int popup_column_set_id = 2;
- views::ColumnSet* popup_column_set =
- layout->AddColumnSet(popup_column_set_id);
- popup_column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 0,
- GridLayout::USE_PREF, 0, 0);
- popup_column_set->AddPaddingColumn(0, kRelatedControlHorizontalSpacing);
- popup_column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 1,
- GridLayout::USE_PREF, 0, 0);
-
- for (std::vector<ContentSettingBubbleModel::PopupItem>::const_iterator
- i(bubble_content.popup_items.begin());
- i != bubble_content.popup_items.end(); ++i) {
- if (i != bubble_content.popup_items.begin())
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- layout->StartRow(0, popup_column_set_id);
-
- views::Link* link = new views::Link(UTF8ToWide(i->title));
- link->SetController(this);
- link->SetElideInMiddle(true);
- popup_links_[link] = i - bubble_content.popup_items.begin();
- layout->AddView(new Favicon((*i).bitmap, this, link));
- layout->AddView(link);
- }
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
-
- views::Separator* separator = new views::Separator;
- layout->StartRow(0, single_column_set_id);
- layout->AddView(separator);
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- }
-
- const ContentSettingBubbleModel::RadioGroup& radio_group =
- bubble_content.radio_group;
- for (ContentSettingBubbleModel::RadioItems::const_iterator i =
- radio_group.radio_items.begin();
- i != radio_group.radio_items.end(); ++i) {
- views::RadioButton* radio = new views::RadioButton(UTF8ToWide(*i), 0);
- radio->set_listener(this);
- radio_group_.push_back(radio);
- layout->StartRow(0, single_column_set_id);
- layout->AddView(radio);
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- }
- if (!radio_group_.empty()) {
- views::Separator* separator = new views::Separator;
- layout->StartRow(0, single_column_set_id);
- layout->AddView(separator, 1, 1, GridLayout::FILL, GridLayout::FILL);
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- // Now that the buttons have been added to the view hierarchy, it's safe
- // to call SetChecked() on them.
- radio_group_[radio_group.default_item]->SetChecked(true);
- }
-
- gfx::Font domain_font =
- views::Label().font().DeriveFont(0, gfx::Font::BOLD);
- const int indented_single_column_set_id = 3;
- // Insert a column set to indent the domain list.
- views::ColumnSet* indented_single_column_set =
- layout->AddColumnSet(indented_single_column_set_id);
- indented_single_column_set->AddPaddingColumn(0, kPanelHorizIndentation);
- indented_single_column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL,
- 1, GridLayout::USE_PREF, 0, 0);
- for (std::vector<ContentSettingBubbleModel::DomainList>::const_iterator i =
- bubble_content.domain_lists.begin();
- i != bubble_content.domain_lists.end(); ++i) {
- layout->StartRow(0, single_column_set_id);
- views::Label* section_title = new views::Label(UTF8ToWide(i->title));
- section_title->SetMultiLine(true);
- section_title->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
- layout->AddView(section_title, 1, 1, GridLayout::FILL, GridLayout::LEADING);
- for (std::set<std::string>::const_iterator j = i->hosts.begin();
- j != i->hosts.end(); ++j) {
- layout->StartRow(0, indented_single_column_set_id);
- layout->AddView(new views::Label(UTF8ToWide(*j), domain_font));
- }
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- }
-
- if (!bubble_content.clear_link.empty()) {
- clear_link_ = new views::Link(UTF8ToWide(bubble_content.clear_link));
- clear_link_->SetController(this);
- layout->StartRow(0, single_column_set_id);
- layout->AddView(clear_link_);
-
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- layout->StartRow(0, single_column_set_id);
- layout->AddView(new views::Separator, 1, 1,
- GridLayout::FILL, GridLayout::FILL);
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- }
-
- if (!bubble_content.info_link.empty()) {
- info_link_ = new views::Link(UTF8ToWide(bubble_content.info_link));
- info_link_->SetController(this);
- layout->StartRow(0, single_column_set_id);
- layout->AddView(info_link_);
-
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- layout->StartRow(0, single_column_set_id);
- layout->AddView(new views::Separator, 1, 1,
- GridLayout::FILL, GridLayout::FILL);
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- }
-
- if (!bubble_content.load_plugins_link_title.empty()) {
- load_plugins_link_ = new views::Link(
- UTF8ToWide(bubble_content.load_plugins_link_title));
- load_plugins_link_->SetEnabled(bubble_content.load_plugins_link_enabled);
- load_plugins_link_->SetController(this);
- layout->StartRow(0, single_column_set_id);
- layout->AddView(load_plugins_link_);
-
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- layout->StartRow(0, single_column_set_id);
- layout->AddView(new views::Separator, 1, 1,
- GridLayout::FILL, GridLayout::FILL);
- layout->AddPaddingRow(0, kRelatedControlVerticalSpacing);
- }
-
- const int double_column_set_id = 1;
- views::ColumnSet* double_column_set =
- layout->AddColumnSet(double_column_set_id);
- double_column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 1,
- GridLayout::USE_PREF, 0, 0);
- double_column_set->AddPaddingColumn(0, kUnrelatedControlHorizontalSpacing);
- double_column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0,
- GridLayout::USE_PREF, 0, 0);
-
- layout->StartRow(0, double_column_set_id);
- manage_link_ = new views::Link(UTF8ToWide(bubble_content.manage_link));
- manage_link_->SetController(this);
- layout->AddView(manage_link_);
-
- close_button_ =
- new views::NativeButton(this, l10n_util::GetString(IDS_DONE));
- layout->AddView(close_button_);
-}