Browse Source

use base::Owned instead of base::Passed for repeating handler

Jeremy Apthorp 6 years ago
parent
commit
903fd4e5e9
2 changed files with 15 additions and 9 deletions
  1. 14 9
      atom/browser/api/atom_api_session.cc
  2. 1 0
      atom/browser/atom_permission_manager.cc

+ 14 - 9
atom/browser/api/atom_api_session.cc

@@ -586,23 +586,28 @@ void Session::SetPermissionRequestHandler(v8::Local<v8::Value> val,
   using RequestHandler =
       base::Callback<void(content::WebContents*, content::PermissionType,
                           StatusCallback, const base::DictionaryValue&)>;
-  RequestHandler handler;
-  if (!(val->IsNull() || mate::ConvertFromV8(args->isolate(), val, &handler))) {
+  auto* permission_manager = static_cast<AtomPermissionManager*>(
+      browser_context()->GetPermissionControllerDelegate());
+  if (val->IsNull()) {
+    permission_manager->SetPermissionRequestHandler(
+        AtomPermissionManager::RequestHandler());
+    return;
+  }
+  auto handler = std::make_unique<RequestHandler>();
+  if (!mate::ConvertFromV8(args->isolate(), val, handler.get())) {
     args->ThrowError("Must pass null or function");
     return;
   }
-  auto* permission_manager = static_cast<AtomPermissionManager*>(
-      browser_context()->GetPermissionControllerDelegate());
   permission_manager->SetPermissionRequestHandler(base::BindRepeating(
-      [](const RequestHandler& handler, content::WebContents* web_contents,
+      [](RequestHandler* handler, content::WebContents* web_contents,
          content::PermissionType permission_type,
          AtomPermissionManager::StatusCallback callback,
          const base::DictionaryValue& details) {
-        handler.Run(web_contents, permission_type,
-                    base::AdaptCallbackForRepeating(std::move(callback)),
-                    details);
+        handler->Run(web_contents, permission_type,
+                     base::AdaptCallbackForRepeating(std::move(callback)),
+                     details);
       },
-      base::Passed(std::move(handler))));
+      base::Owned(std::move(handler))));
 }
 
 void Session::SetPermissionCheckHandler(v8::Local<v8::Value> val,

+ 1 - 0
atom/browser/atom_permission_manager.cc

@@ -5,6 +5,7 @@
 #include "atom/browser/atom_permission_manager.h"
 
 #include <memory>
+#include <utility>
 #include <vector>
 
 #include "atom/browser/atom_browser_client.h"