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

Unified Diff: chrome/browser/ui/website_settings/permission_bubble_manager.cc

Issue 1251633002: Add BubbleManager to manage bubbles and ChromeBubbleManager for events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Kill views_bubble_controller Created 5 years, 5 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/website_settings/permission_bubble_manager.cc
diff --git a/chrome/browser/ui/website_settings/permission_bubble_manager.cc b/chrome/browser/ui/website_settings/permission_bubble_manager.cc
index 6d62d7a42d2d64dadadef47001164f56009dd3e8..9ad368df8122399be11fee0ba0a4bb12aa420cbc 100644
--- a/chrome/browser/ui/website_settings/permission_bubble_manager.cc
+++ b/chrome/browser/ui/website_settings/permission_bubble_manager.cc
@@ -6,8 +6,12 @@
#include "base/command_line.h"
#include "base/metrics/user_metrics_action.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/website_settings/permission_bubble_delegate.h"
#include "chrome/browser/ui/website_settings/permission_bubble_request.h"
#include "chrome/common/chrome_switches.h"
+#include "components/bubble/bubble_delegate.h"
+#include "components/bubble/bubble_manager.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/user_metrics.h"
@@ -76,18 +80,18 @@ PermissionBubbleManager::PermissionBubbleManager(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
require_user_gesture_(false),
-#if !defined(OS_ANDROID) // No bubbles in android tests.
- view_factory_(base::Bind(&PermissionBubbleView::Create)),
-#endif
- view_(nullptr),
+ bubble_delegate_(nullptr),
+ bubble_manager_(nullptr),
main_frame_has_fully_loaded_(false),
auto_response_for_test_(NONE),
- weak_factory_(this) {
-}
+ weak_factory_(this) {}
PermissionBubbleManager::~PermissionBubbleManager() {
- if (view_ != NULL)
- view_->SetDelegate(NULL);
+ if (bubble_delegate_) {
+ DCHECK(bubble_manager_);
+ bubble_manager_->HideBubble(bubble_delegate_.get());
+ bubble_delegate_.reset();
+ }
std::vector<PermissionBubbleRequest*>::iterator requests_iter;
for (requests_iter = requests_.begin();
@@ -174,14 +178,18 @@ void PermissionBubbleManager::CancelRequest(PermissionBubbleRequest* request) {
// We can simply erase the current entry in the request table if we aren't
// showing the dialog, or if we are showing it and it can accept the update.
- bool can_erase = !IsBubbleVisible() || view_->CanAcceptRequestUpdate();
+ bool can_erase = !IsBubbleVisible();
+
+ // TODO(hcarmona): Don't forget this logic. Maybe improve it? Or remove it?
+ // bool can_erase = !IsBubbleVisible() || view_->CanAcceptRequestUpdate();
+
if (can_erase) {
(*requests_iter)->RequestFinished();
requests_.erase(requests_iter);
accept_states_.erase(accepts_iter);
if (IsBubbleVisible()) {
- view_->Hide();
+ bubble_manager_->HideBubble(bubble_delegate_.get());
// Will redraw the bubble if it is being shown.
TriggerShowBubble();
}
@@ -201,36 +209,49 @@ void PermissionBubbleManager::CancelRequest(PermissionBubbleRequest* request) {
void PermissionBubbleManager::HideBubble() {
// Disengage from the existing view if there is one.
- if (!view_)
+ if (!bubble_delegate_)
return;
- view_->SetDelegate(nullptr);
- view_->Hide();
- view_.reset();
+ // view_->SetDelegate(nullptr);
+ DCHECK(bubble_manager_);
+ bubble_manager_->HideBubble(bubble_delegate_.get());
+ bubble_delegate_.reset();
}
void PermissionBubbleManager::DisplayPendingRequests(Browser* browser) {
if (IsBubbleVisible())
return;
- view_ = view_factory_.Run(browser);
- view_->SetDelegate(this);
+ bubble_manager_ = browser->bubble_manager();
+ bubble_delegate_ =
+ make_scoped_ptr(new PermissionBubbleDelegate(browser, this));
+ // view_ = view_factory_.Run(browser);
+ // view_->SetDelegate(this);
TriggerShowBubble();
}
void PermissionBubbleManager::UpdateAnchorPosition() {
- if (view_)
- view_->UpdateAnchorPosition();
+ // TODO(hcarmona): get rid of this function when the manager is hooked in.
+ if (bubble_delegate_)
+ bubble_manager_->UpdateBubblePosition(bubble_delegate_.get());
}
bool PermissionBubbleManager::IsBubbleVisible() {
- return view_ && view_->IsVisible();
+ if (bubble_delegate_) {
+ DCHECK(bubble_manager_);
+ return bubble_manager_->IsBubbleVisible(bubble_delegate_.get());
+ }
+
+ return false;
}
gfx::NativeWindow PermissionBubbleManager::GetBubbleWindow() {
+ /*
+ * TODO(hcarmona): get rid of this function when the manager is hooked in.
if (view_)
return view_->GetNativeWindow();
+ */
return nullptr;
}
@@ -346,7 +367,7 @@ void PermissionBubbleManager::ScheduleShowBubble() {
}
void PermissionBubbleManager::TriggerShowBubble() {
- if (!view_)
+ if (!bubble_delegate_)
return;
if (IsBubbleVisible())
return;
@@ -375,7 +396,10 @@ void PermissionBubbleManager::TriggerShowBubble() {
accept_states_.resize(requests_.size(), true);
}
- view_->Show(requests_, accept_states_);
+ DCHECK(bubble_manager_);
+ bubble_manager_->ShowBubble(bubble_delegate_.get());
+ // view_->Show(requests_, accept_states_);
+
NotifyBubbleAdded();
// If in testing mode, automatically respond to the bubble that was shown.
@@ -384,8 +408,10 @@ void PermissionBubbleManager::TriggerShowBubble() {
}
void PermissionBubbleManager::FinalizeBubble() {
- if (view_)
- view_->Hide();
+ if (bubble_manager_) {
+ DCHECK(bubble_manager_);
+ bubble_manager_->HideBubble(bubble_delegate_.get());
+ }
std::vector<PermissionBubbleRequest*>::iterator requests_iter;
for (requests_iter = requests_.begin();

Powered by Google App Engine
This is Rietveld 408576698