summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-06 08:48:23 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-06 08:48:23 +0000
commitf8f69210d233566fddf71b57b093dd16da609ffc (patch)
tree9ed9ffcd865d65c11b11f73ea486efa79af13346
parent0af29d8cedd97d4604619dd4ab2b5e0a0805ecb1 (diff)
downloadchromium_src-f8f69210d233566fddf71b57b093dd16da609ffc.zip
chromium_src-f8f69210d233566fddf71b57b093dd16da609ffc.tar.gz
chromium_src-f8f69210d233566fddf71b57b093dd16da609ffc.tar.bz2
Display an info link in the blocked cookies info bubble.
The link will pop up a dialog that displays the cookies blocked and accessed by the current page. The XIB change adds a link-styled button (cell type HyperlinkButtonCell) below the title and above the horizontal line on the bubble with the text IDS_BLOCKED_COOKIES_INFO. The button action is hooked up to showMoreInfo: in the File's Owner. BUG=45230 TEST=none Review URL: http://codereview.chromium.org/2799012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51656 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/app/generated_resources.grd3
-rw-r--r--chrome/app/nibs/ContentBlockedCookies.xib108
-rw-r--r--chrome/browser/cocoa/content_blocked_bubble_controller.h3
-rw-r--r--chrome/browser/cocoa/content_blocked_bubble_controller.mm5
-rw-r--r--chrome/browser/content_setting_bubble_model.cc38
-rw-r--r--chrome/browser/content_setting_bubble_model.h5
-rw-r--r--chrome/browser/content_setting_bubble_model_unittest.cc3
-rw-r--r--chrome/browser/gtk/content_setting_bubble_gtk.cc18
-rw-r--r--chrome/browser/gtk/content_setting_bubble_gtk.h1
-rw-r--r--chrome/browser/views/content_blocked_bubble_contents.cc22
-rw-r--r--chrome/browser/views/content_blocked_bubble_contents.h1
11 files changed, 189 insertions, 18 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 7a86de3..22ceb84 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -2330,6 +2330,9 @@ each locale. -->
<message name="IDS_BLOCKED_COOKIES_LINK" desc="Link to cookie section of content blocking management dialog, displayed in bubble when a page tries to write cookies or other site data.">
Manage cookie blocking...
</message>
+ <message name="IDS_BLOCKED_COOKIES_INFO" desc="Info link to a dialog showing the blocked/allowed cookies, displayed in bubble when a page tries to write cookies or other site data.">
+ See cookies and other site data...
+ </message>
<message name="IDS_BLOCKED_IMAGES_TITLE" desc="Tooltip and bubble info header text when a page is not allowed to display images.">
Images were blocked on this page.
</message>
diff --git a/chrome/app/nibs/ContentBlockedCookies.xib b/chrome/app/nibs/ContentBlockedCookies.xib
index af1ffca..fb9cca0 100644
--- a/chrome/app/nibs/ContentBlockedCookies.xib
+++ b/chrome/app/nibs/ContentBlockedCookies.xib
@@ -3,7 +3,7 @@
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">9L31a</string>
- <string key="IBDocument.InterfaceBuilderVersion">677</string>
+ <string key="IBDocument.InterfaceBuilderVersion">680</string>
<string key="IBDocument.AppKitVersion">949.54</string>
<string key="IBDocument.HIToolboxVersion">353.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
@@ -37,7 +37,7 @@
<object class="NSWindowTemplate" id="1005">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
- <string key="NSWindowRect">{{196, 422}, {316, 88}}</string>
+ <string key="NSWindowRect">{{196, 428}, {316, 114}}</string>
<int key="NSWTFlags">536873984</int>
<string key="NSWindowTitle">Window</string>
<string key="NSWindowClass">InfoBubbleWindow</string>
@@ -56,7 +56,7 @@
<object class="NSTextField" id="266815090">
<reference key="NSNextResponder" ref="301729179"/>
<int key="NSvFlags">266</int>
- <string key="NSFrame">{{17, 54}, {282, 14}}</string>
+ <string key="NSFrame">{{17, 86}, {282, 14}}</string>
<reference key="NSSuperview" ref="301729179"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="157361777">
@@ -92,14 +92,14 @@
<object class="NSBox" id="913795455">
<reference key="NSNextResponder" ref="301729179"/>
<int key="NSvFlags">34</int>
- <string key="NSFrame">{{20, 43}, {276, 5}}</string>
+ <string key="NSFrame">{{20, 48}, {276, 5}}</string>
<reference key="NSSuperview" ref="301729179"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents">Box</string>
- <object class="NSFont" key="NSSupport">
+ <object class="NSFont" key="NSSupport" id="27790857">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">1.300000e+01</double>
<int key="NSfFlags">1044</int>
@@ -149,7 +149,7 @@
</object>
</object>
</object>
- <string key="NSFrameSize">{192, 37}</string>
+ <string key="NSFrame">{{0, 5}, {192, 37}}</string>
<reference key="NSSuperview" ref="301729179"/>
<string key="NSClassName">GTMWidthBasedTweaker</string>
</object>
@@ -179,17 +179,42 @@
</object>
</object>
</object>
- <string key="NSFrame">{{193, 0}, {123, 37}}</string>
+ <string key="NSFrame">{{193, 5}, {123, 37}}</string>
<reference key="NSSuperview" ref="301729179"/>
<string key="NSClassName">GTMWidthBasedTweaker</string>
</object>
+ <object class="NSButton" id="594274651">
+ <reference key="NSNextResponder" ref="301729179"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{18, 46}, {280, 25}}</string>
+ <reference key="NSSuperview" ref="301729179"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="189684656">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">^IDS_BLOCKED_COOKIES_INFO</string>
+ <reference key="NSSupport" ref="27790857"/>
+ <reference key="NSControlView" ref="594274651"/>
+ <int key="NSButtonFlags">-2038021889</int>
+ <int key="NSButtonFlags2">134</int>
+ <object class="NSFont" key="NSAlternateImage">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.300000e+01</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
</object>
- <string key="NSFrameSize">{316, 88}</string>
+ <string key="NSFrame">{{0, -6}, {316, 120}}</string>
<reference key="NSSuperview" ref="1006"/>
<string key="NSClassName">InfoBubbleView</string>
</object>
</object>
- <string key="NSFrameSize">{316, 88}</string>
+ <string key="NSFrameSize">{316, 114}</string>
<reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
@@ -285,6 +310,14 @@
</object>
<int key="connectionID">34</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showMoreInfo:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="594274651"/>
+ </object>
+ <int key="connectionID">39</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -339,9 +372,10 @@
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="266815090"/>
- <reference ref="913795455"/>
<reference ref="395762087"/>
<reference ref="730386640"/>
+ <reference ref="594274651"/>
+ <reference ref="913795455"/>
</object>
<reference key="parent" ref="1006"/>
</object>
@@ -420,6 +454,20 @@
<reference key="object" ref="319182835"/>
<reference key="parent" ref="91589614"/>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">37</int>
+ <reference key="object" ref="594274651"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="189684656"/>
+ </object>
+ <reference key="parent" ref="301729179"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">38</int>
+ <reference key="object" ref="189684656"/>
+ <reference key="parent" ref="594274651"/>
+ </object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
@@ -443,6 +491,9 @@
<string>2.IBPluginDependency</string>
<string>20.IBPluginDependency</string>
<string>21.IBPluginDependency</string>
+ <string>37.IBPluginDependency</string>
+ <string>38.CustomClassName</string>
+ <string>38.IBPluginDependency</string>
<string>4.IBPluginDependency</string>
<string>7.IBPluginDependency</string>
<string>8.IBPluginDependency</string>
@@ -452,9 +503,9 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{345, 608}, {316, 88}}</string>
+ <string>{{345, 582}, {316, 114}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{345, 608}, {316, 88}}</string>
+ <string>{{345, 582}, {316, 114}}</string>
<boolean value="NO"/>
<string>{196, 240}</string>
<string>{{357, 418}, {480, 270}}</string>
@@ -467,6 +518,9 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>HyperlinkButtonCell</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
@@ -491,7 +545,7 @@
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">34</int>
+ <int key="maxID">39</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -521,6 +575,7 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<string>allowBlockToggled:</string>
<string>closeBubble:</string>
+ <string>showMoreInfo:</string>
<string>manageBlocking:</string>
</object>
<object class="NSMutableArray" key="dict.values">
@@ -528,6 +583,7 @@
<string>id</string>
<string>id</string>
<string>id</string>
+ <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
@@ -597,7 +653,7 @@
<string>id</string>
</object>
</object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="767752153">
+ <object class="IBClassDescriptionSource" key="sourceIdentifier" id="907487000">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">../third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h</string>
</object>
@@ -620,7 +676,15 @@
<string>NSView</string>
</object>
</object>
- <reference key="sourceIdentifier" ref="767752153"/>
+ <reference key="sourceIdentifier" ref="907487000"/>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">HyperlinkButtonCell</string>
+ <string key="superclassName">NSButtonCell</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">browser/cocoa/hyperlink_button_cell.h</string>
+ </object>
</object>
<object class="IBPartialClassDescription">
<string key="className">InfoBubbleView</string>
@@ -642,6 +706,20 @@
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">../third_party/GTM/Foundation/GTMNSObject+KeyValueObserving.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">browser/cocoa/objc_zombie.h</string>
+ </object>
+ </object>
+ <object class="IBPartialClassDescription">
+ <string key="className">NSObject</string>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
<string key="minorKey">browser/cocoa/status_bubble_mac.h</string>
</object>
</object>
diff --git a/chrome/browser/cocoa/content_blocked_bubble_controller.h b/chrome/browser/cocoa/content_blocked_bubble_controller.h
index 6bb7c90..3d824cf 100644
--- a/chrome/browser/cocoa/content_blocked_bubble_controller.h
+++ b/chrome/browser/cocoa/content_blocked_bubble_controller.h
@@ -53,4 +53,7 @@ typedef std::map<NSButton*, int> PopupLinks;
// Callback for "manage" button.
- (IBAction)manageBlocking:(id)sender;
+// Callback for "info" link.
+- (IBAction)showMoreInfo:(id)sender;
+
@end
diff --git a/chrome/browser/cocoa/content_blocked_bubble_controller.mm b/chrome/browser/cocoa/content_blocked_bubble_controller.mm
index d0ae86f..b4c453b 100644
--- a/chrome/browser/cocoa/content_blocked_bubble_controller.mm
+++ b/chrome/browser/cocoa/content_blocked_bubble_controller.mm
@@ -393,6 +393,11 @@ NSTextField* LabelWithFrame(NSString* text, const NSRect& frame) {
contentSettingBubbleModel_->OnManageLinkClicked();
}
+- (IBAction)showMoreInfo:(id)sender {
+ contentSettingBubbleModel_->OnInfoLinkClicked();
+ [self close];
+}
+
- (void)popupLinkClicked:(id)sender {
content_blocked_bubble::PopupLinks::iterator i(popupLinks_.find(sender));
DCHECK(i != popupLinks_.end());
diff --git a/chrome/browser/content_setting_bubble_model.cc b/chrome/browser/content_setting_bubble_model.cc
index f396cded..19587a5 100644
--- a/chrome/browser/content_setting_bubble_model.cc
+++ b/chrome/browser/content_setting_bubble_model.cc
@@ -66,6 +66,40 @@ class ContentSettingTitleAndLinkModel : public ContentSettingBubbleModel {
}
};
+class ContentSettingTitleLinkAndInfoModel
+ : public ContentSettingTitleAndLinkModel {
+ public:
+ ContentSettingTitleLinkAndInfoModel(TabContents* tab_contents,
+ Profile* profile,
+ ContentSettingsType content_type)
+ : ContentSettingTitleAndLinkModel(tab_contents, profile, content_type) {
+ SetInfoLink();
+ }
+
+ private:
+ void SetInfoLink() {
+ static const int kInfoIDs[] = {
+ IDS_BLOCKED_COOKIES_INFO,
+ 0, // Images do not have an info link.
+ 0, // Javascript doesn't have an info link.
+ 0, // Plugins do not have an info link.
+ 0, // Popups do not have an info link.
+ 0, // Geolocation does not have an info link.
+ 0, // Notifications do not have a bubble.
+ };
+ COMPILE_ASSERT(arraysize(kInfoIDs) == CONTENT_SETTINGS_NUM_TYPES,
+ Need_a_setting_for_every_content_settings_type);
+ if (kInfoIDs[content_type()])
+ set_info_link(l10n_util::GetStringUTF8(kInfoIDs[content_type()]));
+ }
+
+ virtual void OnInfoLinkClicked() {
+ DCHECK(content_type() == CONTENT_SETTINGS_TYPE_COOKIES);
+ // FIXME(jochen): show cookie info dialog.
+ }
+};
+
+
class ContentSettingSingleRadioGroup : public ContentSettingTitleAndLinkModel {
public:
ContentSettingSingleRadioGroup(TabContents* tab_contents, Profile* profile,
@@ -256,8 +290,8 @@ ContentSettingBubbleModel*
Profile* profile,
ContentSettingsType content_type) {
if (content_type == CONTENT_SETTINGS_TYPE_COOKIES) {
- return new ContentSettingTitleAndLinkModel(tab_contents, profile,
- content_type);
+ return new ContentSettingTitleLinkAndInfoModel(tab_contents, profile,
+ content_type);
}
if (content_type == CONTENT_SETTINGS_TYPE_POPUPS) {
return new ContentSettingPopupBubbleModel(tab_contents, profile,
diff --git a/chrome/browser/content_setting_bubble_model.h b/chrome/browser/content_setting_bubble_model.h
index 18cf6ac..a8aa744 100644
--- a/chrome/browser/content_setting_bubble_model.h
+++ b/chrome/browser/content_setting_bubble_model.h
@@ -59,6 +59,7 @@ class ContentSettingBubbleModel : public NotificationObserver {
std::vector<DomainList> domain_lists;
std::string manage_link;
std::string clear_link;
+ std::string info_link;
};
const BubbleContent& bubble_content() const { return bubble_content_; }
@@ -72,6 +73,7 @@ class ContentSettingBubbleModel : public NotificationObserver {
virtual void OnPopupClicked(int index) {}
virtual void OnManageLinkClicked() {}
virtual void OnClearLinkClicked() {}
+ virtual void OnInfoLinkClicked() {}
protected:
ContentSettingBubbleModel(TabContents* tab_contents, Profile* profile,
@@ -96,6 +98,9 @@ class ContentSettingBubbleModel : public NotificationObserver {
void set_clear_link(const std::string& link) {
bubble_content_.clear_link = link;
}
+ void set_info_link(const std::string& link) {
+ bubble_content_.info_link = link;
+ }
private:
TabContents* tab_contents_;
diff --git a/chrome/browser/content_setting_bubble_model_unittest.cc b/chrome/browser/content_setting_bubble_model_unittest.cc
index 5615a94..5f96e49 100644
--- a/chrome/browser/content_setting_bubble_model_unittest.cc
+++ b/chrome/browser/content_setting_bubble_model_unittest.cc
@@ -36,6 +36,7 @@ class ContentSettingBubbleModelTest : public RenderViewHostTestHarness {
else
EXPECT_EQ(std::string(), bubble_content.clear_link);
EXPECT_NE(std::string(), bubble_content.manage_link);
+ EXPECT_EQ(std::string(), bubble_content.info_link);
EXPECT_EQ(std::string(), bubble_content.title);
}
@@ -55,6 +56,7 @@ TEST_F(ContentSettingBubbleModelTest, ImageRadios) {
EXPECT_EQ(2U, bubble_content.radio_group.radio_items.size());
EXPECT_EQ(0, bubble_content.radio_group.default_item);
EXPECT_NE(std::string(), bubble_content.manage_link);
+ EXPECT_EQ(std::string(), bubble_content.info_link);
EXPECT_NE(std::string(), bubble_content.title);
}
@@ -70,6 +72,7 @@ TEST_F(ContentSettingBubbleModelTest, Cookies) {
content_setting_bubble_model->bubble_content();
EXPECT_EQ(0U, bubble_content.radio_group.radio_items.size());
EXPECT_NE(std::string(), bubble_content.manage_link);
+ EXPECT_NE(std::string(), bubble_content.info_link);
EXPECT_NE(std::string(), bubble_content.title);
}
diff --git a/chrome/browser/gtk/content_setting_bubble_gtk.cc b/chrome/browser/gtk/content_setting_bubble_gtk.cc
index e4afdcd..f285fd8 100644
--- a/chrome/browser/gtk/content_setting_bubble_gtk.cc
+++ b/chrome/browser/gtk/content_setting_bubble_gtk.cc
@@ -184,6 +184,19 @@ void ContentSettingBubbleGtk::BuildBubble() {
FALSE, FALSE, 0);
}
+ if (!content.info_link.empty()) {
+ GtkWidget* info_link_box = gtk_hbox_new(FALSE, 0);
+ GtkWidget* info_link = gtk_chrome_link_button_new(
+ content.info_link.c_str());
+ g_signal_connect(info_link, "clicked", G_CALLBACK(OnInfoLinkClickedThunk),
+ this);
+ gtk_box_pack_start(GTK_BOX(info_link_box), info_link, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(bubble_content), info_link_box,
+ FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(bubble_content), gtk_hseparator_new(),
+ FALSE, FALSE, 0);
+ }
+
GtkWidget* bottom_box = gtk_hbox_new(FALSE, 0);
GtkWidget* manage_link =
@@ -263,3 +276,8 @@ void ContentSettingBubbleGtk::OnClearLinkClicked(GtkWidget* button) {
content_setting_bubble_model_->OnClearLinkClicked();
Close();
}
+
+void ContentSettingBubbleGtk::OnInfoLinkClicked(GtkWidget* button) {
+ content_setting_bubble_model_->OnInfoLinkClicked();
+ Close();
+}
diff --git a/chrome/browser/gtk/content_setting_bubble_gtk.h b/chrome/browser/gtk/content_setting_bubble_gtk.h
index e0e9921..868eeb2 100644
--- a/chrome/browser/gtk/content_setting_bubble_gtk.h
+++ b/chrome/browser/gtk/content_setting_bubble_gtk.h
@@ -58,6 +58,7 @@ class ContentSettingBubbleGtk : public InfoBubbleGtkDelegate,
CHROMEGTK_CALLBACK_0(ContentSettingBubbleGtk, void, OnCloseButtonClicked);
CHROMEGTK_CALLBACK_0(ContentSettingBubbleGtk, void, OnManageLinkClicked);
CHROMEGTK_CALLBACK_0(ContentSettingBubbleGtk, void, OnClearLinkClicked);
+ CHROMEGTK_CALLBACK_0(ContentSettingBubbleGtk, void, OnInfoLinkClicked);
// We position the bubble near this widget.
GtkWidget* anchor_;
diff --git a/chrome/browser/views/content_blocked_bubble_contents.cc b/chrome/browser/views/content_blocked_bubble_contents.cc
index ab7675a..bef80be 100644
--- a/chrome/browser/views/content_blocked_bubble_contents.cc
+++ b/chrome/browser/views/content_blocked_bubble_contents.cc
@@ -102,7 +102,8 @@ ContentSettingBubbleContents::ContentSettingBubbleContents(
info_bubble_(NULL),
close_button_(NULL),
manage_link_(NULL),
- clear_link_(NULL) {
+ clear_link_(NULL),
+ info_link_(NULL) {
registrar_.Add(this, NotificationType::TAB_CONTENTS_DESTROYED,
Source<TabContents>(tab_contents));
}
@@ -150,6 +151,12 @@ void ContentSettingBubbleContents::LinkActivated(views::Link* source,
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;
+ }
PopupLinks::const_iterator i(popup_links_.find(source));
DCHECK(i != popup_links_.end());
@@ -283,6 +290,19 @@ void ContentSettingBubbleContents::InitControlLayout() {
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);
+ }
+
const int double_column_set_id = 1;
views::ColumnSet* double_column_set =
layout->AddColumnSet(double_column_set_id);
diff --git a/chrome/browser/views/content_blocked_bubble_contents.h b/chrome/browser/views/content_blocked_bubble_contents.h
index ad4511c..bdbaf9e 100644
--- a/chrome/browser/views/content_blocked_bubble_contents.h
+++ b/chrome/browser/views/content_blocked_bubble_contents.h
@@ -93,6 +93,7 @@ class ContentSettingBubbleContents : public views::View,
views::NativeButton* close_button_;
views::Link* manage_link_;
views::Link* clear_link_;
+ views::Link* info_link_;
DISALLOW_IMPLICIT_CONSTRUCTORS(ContentSettingBubbleContents);
};