| Index: chrome/browser/content_settings/permission_queue_controller.cc
|
| diff --git a/chrome/browser/content_settings/permission_queue_controller.cc b/chrome/browser/content_settings/permission_queue_controller.cc
|
| index c0a65315e584df05c66fa566b6b243405dd6a081..10cf79b7b0e9b3aa10153ae49b6e14499cd5c520 100644
|
| --- a/chrome/browser/content_settings/permission_queue_controller.cc
|
| +++ b/chrome/browser/content_settings/permission_queue_controller.cc
|
| @@ -31,13 +31,23 @@
|
| namespace {
|
|
|
| InfoBarService* GetInfoBarService(const PermissionRequestID& id) {
|
| - content::WebContents* web_contents =
|
| - tab_util::GetWebContentsByID(id.render_process_id(), id.render_view_id());
|
| + content::WebContents* web_contents = tab_util::GetWebContentsByFrameID(
|
| + id.render_process_id(), id.render_frame_id());
|
| return web_contents ? InfoBarService::FromWebContents(web_contents) : NULL;
|
| }
|
|
|
| +bool ArePermissionRequestsForSameTab(
|
| + const PermissionRequestID& request,
|
| + const PermissionRequestID& other_request) {
|
| + content::WebContents* web_contents = tab_util::GetWebContentsByFrameID(
|
| + request.render_process_id(), request.render_frame_id());
|
| + content::WebContents* other_web_contents = tab_util::GetWebContentsByFrameID(
|
| + other_request.render_process_id(), other_request.render_frame_id());
|
| +
|
| + return web_contents == other_web_contents;
|
| }
|
|
|
| +} // anonymous namespace
|
|
|
| class PermissionQueueController::PendingInfobarRequest {
|
| public:
|
| @@ -171,13 +181,15 @@ void PermissionQueueController::CancelInfoBarRequest(
|
|
|
| for (PendingInfobarRequests::iterator i(pending_infobar_requests_.begin());
|
| i != pending_infobar_requests_.end(); ++i) {
|
| - if (i->id().Equals(id)) {
|
| - if (i->has_infobar())
|
| - GetInfoBarService(id)->RemoveInfoBar(i->infobar());
|
| - else
|
| - pending_infobar_requests_.erase(i);
|
| - return;
|
| - }
|
| + if (!i->id().Equals(id))
|
| + continue;
|
| +
|
| + InfoBarService* infobar_service = GetInfoBarService(id);
|
| + if (infobar_service && i->has_infobar())
|
| + infobar_service->RemoveInfoBar(i->infobar());
|
| + else
|
| + pending_infobar_requests_.erase(i);
|
| + return;
|
| }
|
| }
|
|
|
| @@ -287,7 +299,7 @@ bool PermissionQueueController::AlreadyShowingInfoBarForTab(
|
| for (PendingInfobarRequests::const_iterator i(
|
| pending_infobar_requests_.begin());
|
| i != pending_infobar_requests_.end(); ++i) {
|
| - if (i->id().IsForSameTabAs(id) && i->has_infobar())
|
| + if (ArePermissionRequestsForSameTab(i->id(), id) && i->has_infobar())
|
| return true;
|
| }
|
| return false;
|
| @@ -314,7 +326,7 @@ void PermissionQueueController::ShowQueuedInfoBarForTab(
|
|
|
| for (PendingInfobarRequests::iterator i = pending_infobar_requests_.begin();
|
| i != pending_infobar_requests_.end(); ++i) {
|
| - if (i->id().IsForSameTabAs(id) && !i->has_infobar()) {
|
| + if (ArePermissionRequestsForSameTab(i->id(), id) && !i->has_infobar()) {
|
| RegisterForInfoBarNotifications(infobar_service);
|
| i->CreateInfoBar(
|
| this, profile_->GetPrefs()->GetString(prefs::kAcceptLanguages));
|
| @@ -329,7 +341,7 @@ void PermissionQueueController::ClearPendingInfobarRequestsForTab(
|
| const PermissionRequestID& id) {
|
| for (PendingInfobarRequests::iterator i = pending_infobar_requests_.begin();
|
| i != pending_infobar_requests_.end(); ) {
|
| - if (i->id().IsForSameTabAs(id)) {
|
| + if (ArePermissionRequestsForSameTab(i->id(), id)) {
|
| DCHECK(!i->has_infobar());
|
| i = pending_infobar_requests_.erase(i);
|
| } else {
|
|
|