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

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: 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 }
michaelbai 2014/05/06 23:09:50 Note, the all resources will passed to permission
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())
mkosiba (inactive) 2014/05/07 17:25:50 ok, so if we get here the user managed to create a
michaelbai 2014/05/07 19:22:25 Done.
60 return;
61
62 preauthorized_permission_[key] |= resources;
benm (inactive) 2014/05/07 17:01:21 I think you need to initialise this mapped value i
michaelbai 2014/05/07 19:22:25 In this case, the default value is 0, we can use i
63 }
64
48 PermissionRequestHandler::RequestIterator 65 PermissionRequestHandler::RequestIterator
49 PermissionRequestHandler::FindRequest(const GURL& origin, 66 PermissionRequestHandler::FindRequest(const GURL& origin,
50 int64 resources) { 67 int64 resources) {
51 RequestIterator i; 68 RequestIterator i;
52 for (i = requests_.begin(); i != requests_.end(); ++i) { 69 for (i = requests_.begin(); i != requests_.end(); ++i) {
53 if (i->get() && i->get()->GetOrigin() == origin && 70 if (i->get() && i->get()->GetOrigin() == origin &&
54 i->get()->GetResources() == resources) { 71 i->get()->GetResources() == resources) {
55 break; 72 break;
56 } 73 }
57 } 74 }
(...skipping 12 matching lines...) Expand all
70 87
71 void PermissionRequestHandler::PruneRequests() { 88 void PermissionRequestHandler::PruneRequests() {
72 for (RequestIterator i = requests_.begin(); i != requests_.end();) { 89 for (RequestIterator i = requests_.begin(); i != requests_.end();) {
73 if (!i->get()) 90 if (!i->get())
74 i = requests_.erase(i); 91 i = requests_.erase(i);
75 else 92 else
76 ++i; 93 ++i;
77 } 94 }
78 } 95 }
79 96
97 bool PermissionRequestHandler::Preauthorized(const GURL& origin,
98 int64 resources) {
99 std::map<std::string, int64>::iterator i =
100 preauthorized_permission_.find(origin.GetOrigin().spec());
mkosiba (inactive) 2014/05/07 17:25:50 I'm paranoid so I'd suggest doing the same thing y
michaelbai 2014/05/07 19:22:25 I would like to make you happy, but I need to chec
101 return (resources & i->second) == resources;
mkosiba (inactive) 2014/05/07 17:25:50 what if we don't find the origin in the map? you'l
michaelbai 2014/05/07 19:22:25 Oops, I were checking it there, it was removed wit
102 }
103
80 } // namespace android_webivew 104 } // namespace android_webivew
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698