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

Unified Diff: android_webview/native/permission/permission_request_handler.cc

Issue 288463003: Cancel the permission request (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix unittests Created 6 years, 7 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: android_webview/native/permission/permission_request_handler.cc
diff --git a/android_webview/native/permission/permission_request_handler.cc b/android_webview/native/permission/permission_request_handler.cc
index 20cc748236b11550924f3f00318caf787368387c..bb6cce3f04d71c02a0fe301016ba7b90c7cb23a4 100644
--- a/android_webview/native/permission/permission_request_handler.cc
+++ b/android_webview/native/permission/permission_request_handler.cc
@@ -9,19 +9,35 @@
#include "android_webview/native/permission/permission_request_handler_client.h"
#include "base/android/scoped_java_ref.h"
#include "base/bind.h"
+#include "content/public/browser/navigation_details.h"
+#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/web_contents.h"
using base::android::ScopedJavaLocalRef;
namespace android_webview {
+namespace {
+
+int GetActiveEntryID(content::WebContents* web_contents) {
+ if (!web_contents) return 0;
+
+ content::NavigationEntry* active_entry =
+ web_contents->GetController().GetActiveEntry();
+ return active_entry ? active_entry->GetUniqueID() : 0;
+}
+
+} // namespace
+
PermissionRequestHandler::PermissionRequestHandler(
- PermissionRequestHandlerClient* client)
- : client_(client) {
+ PermissionRequestHandlerClient* client, content::WebContents* web_contents)
+ : content::WebContentsObserver(web_contents),
+ client_(client),
+ contents_unique_id_(GetActiveEntryID(web_contents)) {
}
PermissionRequestHandler::~PermissionRequestHandler() {
- for (RequestIterator i = requests_.begin(); i != requests_.end(); ++i)
- CancelRequest(i);
+ CancelAllRequests();
}
void PermissionRequestHandler::SendRequest(
@@ -64,6 +80,18 @@ void PermissionRequestHandler::PreauthorizePermission(const GURL& origin,
preauthorized_permission_[key] |= resources;
}
+void PermissionRequestHandler::NavigationEntryCommitted(
+ const content::LoadCommittedDetails& details) {
+ const content::PageTransition transition = details.entry->GetTransitionType();
+ if (details.is_navigation_to_different_page() ||
+ content::PageTransitionStripQualifier(transition) ==
+ content::PAGE_TRANSITION_RELOAD ||
+ contents_unique_id_ != details.entry->GetUniqueID()) {
+ CancelAllRequests();
+ contents_unique_id_ = details.entry->GetUniqueID();
+ }
+}
+
PermissionRequestHandler::RequestIterator
PermissionRequestHandler::FindRequest(const GURL& origin,
int64 resources) {
@@ -87,6 +115,11 @@ void PermissionRequestHandler::CancelRequest(RequestIterator i) {
delete i->get();
}
+void PermissionRequestHandler::CancelAllRequests() {
+ for (RequestIterator i = requests_.begin(); i != requests_.end(); ++i)
+ CancelRequest(i);
+}
+
void PermissionRequestHandler::PruneRequests() {
for (RequestIterator i = requests_.begin(); i != requests_.end();) {
if (!i->get())

Powered by Google App Engine
This is Rietveld 408576698