Index: chrome/renderer/permission_request_map.cc |
diff --git a/chrome/renderer/permission_request_map.cc b/chrome/renderer/permission_request_map.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2eaaf8fc8da2da61a66c2ed2835decfaca80e769 |
--- /dev/null |
+++ b/chrome/renderer/permission_request_map.cc |
@@ -0,0 +1,61 @@ |
+// 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 "chrome/renderer/permission_request_map.h" |
+ |
+#include "base/lazy_instance.h" |
+#include "base/threading/thread_local.h" |
+#include "third_party/WebKit/public/platform/WebPermissionCallbacks.h" |
+ |
+using blink::WebPermissionCallbacks; |
+ |
+namespace content { |
+ |
+namespace { |
+ |
+base::LazyInstance<base::ThreadLocalPointer<PermissionRequestMap> >::Leaky |
+ g_permission_request_map_tls = LAZY_INSTANCE_INITIALIZER; |
+ |
+} // namespace |
+ |
+PermissionRequestMap::PermissionRequestMap() { |
+} |
+ |
+// static |
+PermissionRequestMap* PermissionRequestMap::Get() { |
+ return g_permission_request_map_tls.Pointer()->Get(); |
+} |
+ |
+// static |
+PermissionRequestMap* PermissionRequestMap::GetOrCreate() { |
+ if (g_permission_request_map_tls.Pointer()->Get()) |
+ return g_permission_request_map_tls.Pointer()->Get(); |
+ PermissionRequestMap* map = new PermissionRequestMap; |
+ g_permission_request_map_tls.Pointer()->Set(map); |
+ return map; |
+} |
+ |
+PermissionRequestMap::~PermissionRequestMap() { |
+ IDMap<WebPermissionCallbacks>::iterator iter(&permission_request_map_); |
+ while (!iter.IsAtEnd()) { |
+ iter.GetCurrentValue()->doDeny(); |
+ iter.Advance(); |
+ } |
+ g_permission_request_map_tls.Pointer()->Set(NULL); |
+} |
+ |
+int PermissionRequestMap::RegisterPermissionCallbacks( |
+ const WebPermissionCallbacks& callbacks) { |
+ return permission_request_map_.Add(new WebPermissionCallbacks(callbacks)); |
+} |
+ |
+WebPermissionCallbacks* PermissionRequestMap::GetAndUnregisterCallbacks( |
+ int callbacks_id) { |
+ WebPermissionCallbacks* callbacks = |
+ permission_request_map_.Lookup(callbacks_id); |
+ permission_request_map_.Remove(callbacks_id); |
+ return callbacks; |
+} |
+ |
+} // namespace content |