| 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();
|
|
|