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

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

Issue 239793002: Handle media access permission request (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "android_webview/native/permission/permission_request_handler.h"
6
7 #include "android_webview/native/aw_contents.h"
8 #include "base/android/scoped_java_ref.h"
9
10 using base::android::ScopedJavaLocalRef;
11
12 namespace android_webview {
13
14 PermissionRequestHandler::PermissionRequestHandler(AwContents* aw_contents)
15 : aw_contents_(aw_contents) {
16 }
17
18 PermissionRequestHandler::~PermissionRequestHandler() {
19 for (RequestIterator i = requests_.begin(); i != requests_.end(); ++i)
20 CancelRequest(i);
21 }
22
23 void PermissionRequestHandler::SendRequest(
24 scoped_refptr<AwPermissionRequest> request) {
25 ScopedJavaLocalRef<jobject> java_ref = request->CreateJavaPeer(
26 base::Bind(&PermissionRequestHandler::OnRequestProcessed,
benm (inactive) 2014/04/16 14:51:10 do we need a callback here? Would it be better to
michaelbai 2014/04/22 20:53:51 If just passing this, PermissionRequestHandler and
27 base::Unretained(this)));
28 if (!java_ref.is_null()) {
29 requests_.push_back(request);
30 aw_contents_->OnPermissionRequest(java_ref);
31 }
32 }
33
34 void PermissionRequestHandler::CancelRequest(const GURL& origin,
35 int64 resources) {
36 RequestIterator i = FindRequest(origin, resources);
37 while (i != requests_.end()) {
mkosiba (inactive) 2014/04/17 10:34:06 could you explain why we need this loop?
michaelbai 2014/04/22 20:53:51 See added comment On 2014/04/17 10:34:06, mkosib
38 CancelRequest(i);
39 requests_.erase(i);
40 i = FindRequest(origin, resources);
41 }
42 }
43
44 void PermissionRequestHandler::OnRequestProcessed(
45 scoped_refptr<AwPermissionRequest> request) {
46 RequestIterator i =
47 FindRequest(request->GetOrigin(), request->GetResources());
48 if (i != requests_.end())
49 requests_.erase(i);
50 }
51
52 PermissionRequestHandler::RequestIterator
53 PermissionRequestHandler::FindRequest(const GURL& origin,
mkosiba (inactive) 2014/04/17 10:34:06 please explain why can't we look requests up by co
michaelbai 2014/04/22 20:53:51 Comparing by pointers requires caller keep referen
54 int64 resources) {
55 RequestIterator i;
56 for (i = requests_.begin(); i != requests_.end(); ++i) {
57 if (i->get()->GetOrigin() == origin &&
58 i->get()->GetResources() == resources) {
59 break;
60 }
61 }
62 return i;
63 }
64
65 void PermissionRequestHandler::CancelRequest(RequestIterator i) {
66 ScopedJavaLocalRef<jobject> java_ref = i->get()->GetJavaObject();
67 if (!java_ref.is_null())
68 aw_contents_->OnPermissionRequestCanceled(java_ref);
69 }
70
71 } // namespace android_webivew
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698