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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c056678a5ed625fcc7e5db2f9012273ceadc6fa2 |
--- /dev/null |
+++ b/android_webview/native/permission/permission_request_handler.cc |
@@ -0,0 +1,71 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "android_webview/native/permission/permission_request_handler.h" |
+ |
+#include "android_webview/native/aw_contents.h" |
+#include "base/android/scoped_java_ref.h" |
+ |
+using base::android::ScopedJavaLocalRef; |
+ |
+namespace android_webview { |
+ |
+PermissionRequestHandler::PermissionRequestHandler(AwContents* aw_contents) |
+ : aw_contents_(aw_contents) { |
+} |
+ |
+PermissionRequestHandler::~PermissionRequestHandler() { |
+ for (RequestIterator i = requests_.begin(); i != requests_.end(); ++i) |
+ CancelRequest(i); |
+} |
+ |
+void PermissionRequestHandler::SendRequest( |
+ scoped_refptr<AwPermissionRequest> request) { |
+ ScopedJavaLocalRef<jobject> java_ref = request->CreateJavaPeer( |
+ 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
|
+ base::Unretained(this))); |
+ if (!java_ref.is_null()) { |
+ requests_.push_back(request); |
+ aw_contents_->OnPermissionRequest(java_ref); |
+ } |
+} |
+ |
+void PermissionRequestHandler::CancelRequest(const GURL& origin, |
+ int64 resources) { |
+ RequestIterator i = FindRequest(origin, resources); |
+ 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
|
+ CancelRequest(i); |
+ requests_.erase(i); |
+ i = FindRequest(origin, resources); |
+ } |
+} |
+ |
+void PermissionRequestHandler::OnRequestProcessed( |
+ scoped_refptr<AwPermissionRequest> request) { |
+ RequestIterator i = |
+ FindRequest(request->GetOrigin(), request->GetResources()); |
+ if (i != requests_.end()) |
+ requests_.erase(i); |
+} |
+ |
+PermissionRequestHandler::RequestIterator |
+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
|
+ int64 resources) { |
+ RequestIterator i; |
+ for (i = requests_.begin(); i != requests_.end(); ++i) { |
+ if (i->get()->GetOrigin() == origin && |
+ i->get()->GetResources() == resources) { |
+ break; |
+ } |
+ } |
+ return i; |
+} |
+ |
+void PermissionRequestHandler::CancelRequest(RequestIterator i) { |
+ ScopedJavaLocalRef<jobject> java_ref = i->get()->GetJavaObject(); |
+ if (!java_ref.is_null()) |
+ aw_contents_->OnPermissionRequestCanceled(java_ref); |
+} |
+ |
+} // namespace android_webivew |