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 08b7431b4934dc0664c59c0d71fb98703f9da635..20cc748236b11550924f3f00318caf787368387c 100644 |
--- a/android_webview/native/permission/permission_request_handler.cc |
+++ b/android_webview/native/permission/permission_request_handler.cc |
@@ -26,6 +26,11 @@ PermissionRequestHandler::~PermissionRequestHandler() { |
void PermissionRequestHandler::SendRequest( |
scoped_ptr<AwPermissionRequestDelegate> request) { |
+ if (Preauthorized(request->GetOrigin(), request->GetResources())) { |
+ request->NotifyRequestResult(true); |
+ return; |
+ } |
+ |
AwPermissionRequest* aw_request = new AwPermissionRequest(request.Pass()); |
requests_.push_back( |
base::WeakPtr<AwPermissionRequest>(aw_request->GetWeakPtr())); |
@@ -45,6 +50,20 @@ void PermissionRequestHandler::CancelRequest(const GURL& origin, |
} |
} |
+void PermissionRequestHandler::PreauthorizePermission(const GURL& origin, |
+ int64 resources) { |
+ if (!resources) |
+ return; |
+ |
+ std::string key = origin.GetOrigin().spec(); |
+ if (key.empty()) { |
+ LOG(ERROR) << "The origin of preauthorization is empty, ignore it."; |
+ return; |
+ } |
+ |
+ preauthorized_permission_[key] |= resources; |
+} |
+ |
PermissionRequestHandler::RequestIterator |
PermissionRequestHandler::FindRequest(const GURL& origin, |
int64 resources) { |
@@ -77,4 +96,13 @@ void PermissionRequestHandler::PruneRequests() { |
} |
} |
+bool PermissionRequestHandler::Preauthorized(const GURL& origin, |
+ int64 resources) { |
+ std::map<std::string, int64>::iterator i = |
+ preauthorized_permission_.find(origin.GetOrigin().spec()); |
+ |
+ return i != preauthorized_permission_.end() && |
+ (resources & i->second) == resources; |
+} |
+ |
} // namespace android_webivew |