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

Unified Diff: chrome/browser/ui/blocked_content/blocked_content_tab_helper.cc

Issue 6854035: Move blocked content from TabContents to TabContentsWrapper. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: put back user_gesture Created 9 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/blocked_content/blocked_content_tab_helper.cc
diff --git a/chrome/browser/ui/blocked_content/blocked_content_tab_helper.cc b/chrome/browser/ui/blocked_content/blocked_content_tab_helper.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f2a0f527bfb6434c57ff5df8ada1483e7bb44397
--- /dev/null
+++ b/chrome/browser/ui/blocked_content/blocked_content_tab_helper.cc
@@ -0,0 +1,117 @@
+// Copyright (c) 2011 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/ui/blocked_content/blocked_content_tab_helper.h"
+
+#include "base/auto_reset.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/blocked_content/blocked_content_container.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "content/browser/renderer_host/render_view_host.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "content/common/notification_service.h"
+
+BlockedContentTabHelper::BlockedContentTabHelper(
+ TabContentsWrapper* tab_contents)
+ : TabContentsObserver(tab_contents->tab_contents()),
+ blocked_contents_(new BlockedContentContainer(tab_contents)),
+ all_contents_blocked_(false),
+ tab_contents_wrapper_(tab_contents) {
+}
+
+BlockedContentTabHelper::~BlockedContentTabHelper() {
+}
+
+void BlockedContentTabHelper::DidNavigateMainFramePostCommit(
+ const NavigationController::LoadCommittedDetails& details,
+ const ViewHostMsg_FrameNavigate_Params& params) {
+ // Clear all page actions, blocked content notifications and browser actions
+ // for this tab, unless this is an in-page navigation.
+ if (!details.is_in_page) {
+ // Close blocked popups.
+ if (blocked_contents_->GetBlockedContentsCount()) {
+ blocked_contents_->Clear();
+ PopupNotificationVisibilityChanged(false);
+ }
+ }
+}
+
+void BlockedContentTabHelper::PopupNotificationVisibilityChanged(
+ bool visible) {
+ if (tab_contents()->is_being_destroyed())
+ return;
+ tab_contents()->GetTabSpecificContentSettings()->SetPopupsBlocked(visible);
+}
+
+void BlockedContentTabHelper::SetAllContentsBlocked(bool value) {
+ if (all_contents_blocked_ == value)
+ return;
+
+ all_contents_blocked_ = value;
+ if (!all_contents_blocked_ && blocked_contents_->GetBlockedContentsCount()) {
+ std::vector<TabContentsWrapper*> blocked;
+ blocked_contents_->GetBlockedContents(&blocked);
+ for (size_t i = 0; i < blocked.size(); ++i)
+ blocked_contents_->LaunchForContents(blocked[i]);
+ }
+}
+
+void BlockedContentTabHelper::AddTabContents(TabContentsWrapper* new_contents,
+ WindowOpenDisposition disposition,
+ const gfx::Rect& initial_pos,
+ bool user_gesture) {
+ if (!blocked_contents_->GetBlockedContentsCount())
+ PopupNotificationVisibilityChanged(true);
+ blocked_contents_->AddTabContents(
+ new_contents, disposition, initial_pos, user_gesture);
+}
+
+void BlockedContentTabHelper::AddPopup(TabContentsWrapper* new_contents,
+ const gfx::Rect& initial_pos,
+ bool user_gesture) {
stevenjb 2011/04/21 22:38:07 This doesn't actually need user_gesture since it d
Avi (use Gerrit) 2011/04/22 03:22:28 True. Next CL; I just want to commit this :)
+ // A page can't spawn popups (or do anything else, either) until its load
+ // commits, so when we reach here, the popup was spawned by the
+ // NavigationController's last committed entry, not the active entry. For
+ // example, if a page opens a popup in an onunload() handler, then the active
+ // entry is the page to be loaded as we navigate away from the unloading
+ // page. For this reason, we can't use GetURL() to get the opener URL,
+ // because it returns the active entry.
+ NavigationEntry* entry = tab_contents()->controller().GetLastCommittedEntry();
+ GURL creator = entry ? entry->virtual_url() : GURL::EmptyGURL();
+
+ if (creator.is_valid() &&
+ tab_contents()->profile()->GetHostContentSettingsMap()->GetContentSetting(
+ creator, CONTENT_SETTINGS_TYPE_POPUPS, "") == CONTENT_SETTING_ALLOW) {
+ tab_contents()->AddNewContents(new_contents->tab_contents(),
+ NEW_POPUP,
+ initial_pos,
+ true); // user_gesture
+ } else {
+ // Call blocked_contents_->AddTabContents with user_gesture == true
+ // so that the contents will not get blocked again.
+ blocked_contents_->AddTabContents(new_contents,
+ NEW_POPUP,
+ initial_pos,
+ true); // user_gesture
+ tab_contents()->GetContentSettingsDelegate()->OnContentBlocked(
+ CONTENT_SETTINGS_TYPE_POPUPS, std::string());
+ }
+}
+
+void BlockedContentTabHelper::LaunchForContents(
+ TabContentsWrapper* tab_contents) {
+ blocked_contents_->LaunchForContents(tab_contents);
+ if (!blocked_contents_->GetBlockedContentsCount())
+ PopupNotificationVisibilityChanged(false);
+}
+
+size_t BlockedContentTabHelper::GetBlockedContentsCount() const {
+ return blocked_contents_->GetBlockedContentsCount();
+}
+
+void BlockedContentTabHelper::GetBlockedContents(
+ std::vector<TabContentsWrapper*>* blocked_contents) const {
+ blocked_contents_->GetBlockedContents(blocked_contents);
+}

Powered by Google App Engine
This is Rietveld 408576698