| 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
|
|
|