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 09b2add4dd9a78aeb3d7738a9af5e457b9b948af..60202ebe904f018a6ef298d8b3dd55ae3ef45f67 100644 |
--- a/chrome/browser/ui/website_settings/permission_bubble_manager.cc |
+++ b/chrome/browser/ui/website_settings/permission_bubble_manager.cc |
@@ -24,23 +24,65 @@ bool PermissionBubbleManager::Enabled() { |
switches::kEnablePermissionsBubbles); |
} |
+ |
+ |
+PermissionBubbleManager::PermissionBubbleManager( |
+ content::WebContents* web_contents) |
+ : content::WebContentsObserver(web_contents), |
+ bubble_showing_(false), |
+ view_(NULL), |
+ customization_mode_(false) { |
+ timer_.reset(new base::Timer(FROM_HERE, |
+ base::TimeDelta::FromMilliseconds(kPermissionsCoalesceIntervalMs), |
+ base::Bind(&PermissionBubbleManager::ShowBubble, base::Unretained(this)), |
+ false)); |
+} |
+ |
+PermissionBubbleManager::~PermissionBubbleManager() { |
+ if (view_ != NULL) |
+ view_->SetDelegate(NULL); |
+ |
+ std::vector<PermissionBubbleRequest*>::iterator requests_iter; |
+ for (requests_iter = requests_.begin(); |
+ requests_iter != requests_.end(); |
+ requests_iter++) { |
+ (*requests_iter)->RequestFinished(); |
+ } |
+ for (requests_iter = queued_requests_.begin(); |
+ requests_iter != queued_requests_.end(); |
+ requests_iter++) { |
+ (*requests_iter)->RequestFinished(); |
+ } |
+} |
+ |
void PermissionBubbleManager::AddRequest(PermissionBubbleRequest* request) { |
- // Don't re-add an existing request. |
+ // Don't re-add an existing request or one with a duplicate text request. |
std::vector<PermissionBubbleRequest*>::iterator requests_iter; |
for (requests_iter = requests_.begin(); |
requests_iter != requests_.end(); |
requests_iter++) { |
if (*requests_iter == request) |
return; |
+ // TODO(gbillock): worry about the requesting host name as well. |
+ if ((*requests_iter)->GetMessageTextFragment() == |
+ request->GetMessageTextFragment()) { |
+ request->RequestFinished(); |
+ return; |
+ } |
+ } |
+ for (requests_iter = queued_requests_.begin(); |
+ requests_iter != queued_requests_.end(); |
+ requests_iter++) { |
+ if (*requests_iter == request) |
+ return; |
+ if ((*requests_iter)->GetMessageTextFragment() == |
+ request->GetMessageTextFragment()) { |
+ request->RequestFinished(); |
+ return; |
+ } |
} |
if (bubble_showing_) { |
- for (requests_iter = queued_requests_.begin(); |
- requests_iter != queued_requests_.end(); |
- requests_iter++) { |
- if (*requests_iter == request) |
- return; |
- } |
queued_requests_.push_back(request); |
return; |
} |
@@ -54,6 +96,11 @@ void PermissionBubbleManager::AddRequest(PermissionBubbleRequest* request) { |
timer_->Reset(); |
} |
+void PermissionBubbleManager::CancelRequest(PermissionBubbleRequest* request) { |
+ // TODO(gbillock): implement |
+ NOTREACHED(); |
+} |
+ |
void PermissionBubbleManager::SetView(PermissionBubbleView* view) { |
if (view == view_) |
return; |
@@ -78,26 +125,6 @@ void PermissionBubbleManager::SetView(PermissionBubbleView* view) { |
view_->Hide(); |
} |
-PermissionBubbleManager::PermissionBubbleManager( |
- content::WebContents* web_contents) |
- : content::WebContentsObserver(web_contents), |
- bubble_showing_(false), |
- view_(NULL), |
- customization_mode_(false) { |
- timer_.reset(new base::Timer(FROM_HERE, |
- base::TimeDelta::FromMilliseconds(kPermissionsCoalesceIntervalMs), |
- base::Bind(&PermissionBubbleManager::ShowBubble, base::Unretained(this)), |
- false)); |
-} |
- |
-PermissionBubbleManager::~PermissionBubbleManager() { |
- if (view_ != NULL) { |
- view_->SetDelegate(NULL); |
- view_->Hide(); |
- bubble_showing_ = false; |
- } |
-} |
- |
void PermissionBubbleManager::DidFinishLoad( |
int64 frame_id, |
const GURL& validated_url, |