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

Side by Side Diff: android_webview/native/permission/permission_request_handler.cc

Issue 274443002: Implement PreauthorizePermission (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/native/permission/permission_request_handler.h" 5 #include "android_webview/native/permission/permission_request_handler.h"
6 6
7 #include "android_webview/native/permission/aw_permission_request.h" 7 #include "android_webview/native/permission/aw_permission_request.h"
8 #include "android_webview/native/permission/aw_permission_request_delegate.h" 8 #include "android_webview/native/permission/aw_permission_request_delegate.h"
9 #include "android_webview/native/permission/permission_request_handler_client.h" 9 #include "android_webview/native/permission/permission_request_handler_client.h"
10 #include "base/android/scoped_java_ref.h" 10 #include "base/android/scoped_java_ref.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 12
13 using base::android::ScopedJavaLocalRef; 13 using base::android::ScopedJavaLocalRef;
14 14
15 namespace android_webview { 15 namespace android_webview {
16 16
17 PermissionRequestHandler::PermissionRequestHandler( 17 PermissionRequestHandler::PermissionRequestHandler(
18 PermissionRequestHandlerClient* client) 18 PermissionRequestHandlerClient* client)
19 : client_(client) { 19 : client_(client) {
20 } 20 }
21 21
22 PermissionRequestHandler::~PermissionRequestHandler() { 22 PermissionRequestHandler::~PermissionRequestHandler() {
23 for (RequestIterator i = requests_.begin(); i != requests_.end(); ++i) 23 for (RequestIterator i = requests_.begin(); i != requests_.end(); ++i)
24 CancelRequest(i); 24 CancelRequest(i);
25 } 25 }
26 26
27 void PermissionRequestHandler::SendRequest( 27 void PermissionRequestHandler::SendRequest(
28 scoped_ptr<AwPermissionRequestDelegate> request) { 28 scoped_ptr<AwPermissionRequestDelegate> request) {
29 if (Preauthorized(request->GetOrigin(), request->GetResources())) {
30 request->NotifyRequestResult(true);
31 return;
32 }
33
29 AwPermissionRequest* aw_request = new AwPermissionRequest(request.Pass()); 34 AwPermissionRequest* aw_request = new AwPermissionRequest(request.Pass());
30 requests_.push_back( 35 requests_.push_back(
31 base::WeakPtr<AwPermissionRequest>(aw_request->GetWeakPtr())); 36 base::WeakPtr<AwPermissionRequest>(aw_request->GetWeakPtr()));
32 client_->OnPermissionRequest(aw_request); 37 client_->OnPermissionRequest(aw_request);
33 PruneRequests(); 38 PruneRequests();
34 } 39 }
35 40
36 void PermissionRequestHandler::CancelRequest(const GURL& origin, 41 void PermissionRequestHandler::CancelRequest(const GURL& origin,
37 int64 resources) { 42 int64 resources) {
38 // The request list might have multiple requests with same origin and 43 // The request list might have multiple requests with same origin and
39 // resources. 44 // resources.
40 RequestIterator i = FindRequest(origin, resources); 45 RequestIterator i = FindRequest(origin, resources);
41 while (i != requests_.end()) { 46 while (i != requests_.end()) {
42 CancelRequest(i); 47 CancelRequest(i);
43 requests_.erase(i); 48 requests_.erase(i);
44 i = FindRequest(origin, resources); 49 i = FindRequest(origin, resources);
45 } 50 }
46 } 51 }
47 52
53 void PermissionRequestHandler::PreauthorizePermission(const GURL& origin,
54 int64 resources) {
55 if (!resources)
56 return;
57
58 std::string key = origin.GetOrigin().spec();
59 if (key.empty()) {
60 LOG(ERROR) << "The origin of preauthorization is empty, ignore it.";
61 return;
62 }
63
64 preauthorized_permission_[key] |= resources;
65 }
66
48 PermissionRequestHandler::RequestIterator 67 PermissionRequestHandler::RequestIterator
49 PermissionRequestHandler::FindRequest(const GURL& origin, 68 PermissionRequestHandler::FindRequest(const GURL& origin,
50 int64 resources) { 69 int64 resources) {
51 RequestIterator i; 70 RequestIterator i;
52 for (i = requests_.begin(); i != requests_.end(); ++i) { 71 for (i = requests_.begin(); i != requests_.end(); ++i) {
53 if (i->get() && i->get()->GetOrigin() == origin && 72 if (i->get() && i->get()->GetOrigin() == origin &&
54 i->get()->GetResources() == resources) { 73 i->get()->GetResources() == resources) {
55 break; 74 break;
56 } 75 }
57 } 76 }
(...skipping 12 matching lines...) Expand all
70 89
71 void PermissionRequestHandler::PruneRequests() { 90 void PermissionRequestHandler::PruneRequests() {
72 for (RequestIterator i = requests_.begin(); i != requests_.end();) { 91 for (RequestIterator i = requests_.begin(); i != requests_.end();) {
73 if (!i->get()) 92 if (!i->get())
74 i = requests_.erase(i); 93 i = requests_.erase(i);
75 else 94 else
76 ++i; 95 ++i;
77 } 96 }
78 } 97 }
79 98
99 bool PermissionRequestHandler::Preauthorized(const GURL& origin,
100 int64 resources) {
101 std::map<std::string, int64>::iterator i =
102 preauthorized_permission_.find(origin.GetOrigin().spec());
103
104 return i != preauthorized_permission_.end() &&
105 (resources & i->second) == resources;
106 }
107
80 } // namespace android_webivew 108 } // namespace android_webivew
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698