Convert Callbacks to OnceCallbacks in permissions APIs.

These callbacks are only called once, so change them to the correct
spelling. This allows callbacks in content/shell/ to be converted.

[email protected], [email protected], [email protected], [email protected]
TBR=skyostil

Bug: 953861
Change-Id: I5ca14e8bbf973658b3df8b650f6f4d51797e362f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1592356
Reviewed-by: danakj <[email protected]>
Reviewed-by: Luke Halliwell <[email protected]>
Reviewed-by: Avi Drissman <[email protected]>
Reviewed-by: Reilly Grant <[email protected]>
Reviewed-by: Peter Beverloo <[email protected]>
Reviewed-by: Balazs Engedy <[email protected]>
Commit-Queue: danakj <[email protected]>
Cr-Commit-Position: refs/heads/master@{#656049}
diff --git a/chrome/browser/permissions/permission_context_base.cc b/chrome/browser/permissions/permission_context_base.cc
index bede441..91ec8ab 100644
--- a/chrome/browser/permissions/permission_context_base.cc
+++ b/chrome/browser/permissions/permission_context_base.cc
@@ -116,7 +116,7 @@
     const PermissionRequestID& id,
     const GURL& requesting_frame,
     bool user_gesture,
-    const BrowserPermissionCallback& callback) {
+    BrowserPermissionCallback callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   GURL requesting_origin = requesting_frame.GetOrigin();
@@ -130,8 +130,9 @@
              << " from an invalid URL: " << requesting_origin << ","
              << embedding_origin << " (" << type_name
              << " is not supported in popups)";
-    NotifyPermissionSet(id, requesting_origin, embedding_origin, callback,
-                        false /* persist */, CONTENT_SETTING_BLOCK);
+    NotifyPermissionSet(id, requesting_origin, embedding_origin,
+                        std::move(callback), false /* persist */,
+                        CONTENT_SETTING_BLOCK);
     return;
   }
 
@@ -150,7 +151,7 @@
         LogPermissionBlockedMessage(web_contents,
                                     kPermissionBlockedKillSwitchMessage,
                                     content_settings_type_);
-        callback.Run(CONTENT_SETTING_BLOCK);
+        std::move(callback).Run(CONTENT_SETTING_BLOCK);
         return;
       case PermissionStatusSource::MULTIPLE_DISMISSALS:
         LogPermissionBlockedMessage(web_contents,
@@ -176,8 +177,9 @@
     // If we are under embargo, record the embargo reason for which we have
     // suppressed the prompt.
     PermissionUmaUtil::RecordEmbargoPromptSuppressionFromSource(result.source);
-    NotifyPermissionSet(id, requesting_origin, embedding_origin, callback,
-                        false /* persist */, result.content_setting);
+    NotifyPermissionSet(id, requesting_origin, embedding_origin,
+                        std::move(callback), false /* persist */,
+                        result.content_setting);
     return;
   }
 
@@ -188,7 +190,7 @@
       PermissionEmbargoStatus::NOT_EMBARGOED);
 
   DecidePermission(web_contents, id, requesting_origin, embedding_origin,
-                   user_gesture, callback);
+                   user_gesture, std::move(callback));
 }
 
 void PermissionContextBase::UserMadePermissionDecision(
@@ -314,7 +316,7 @@
     const GURL& requesting_origin,
     const GURL& embedding_origin,
     bool user_gesture,
-    const BrowserPermissionCallback& callback) {
+    BrowserPermissionCallback callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   // Under permission delegation, when we display a permission prompt, the
@@ -338,11 +340,11 @@
   std::unique_ptr<PermissionRequest> request_ptr =
       std::make_unique<PermissionRequestImpl>(
           requesting_origin, content_settings_type_, user_gesture,
-          base::Bind(&PermissionContextBase::PermissionDecided,
-                     weak_factory_.GetWeakPtr(), id, requesting_origin,
-                     embedding_origin, callback),
-          base::Bind(&PermissionContextBase::CleanUpRequest,
-                     weak_factory_.GetWeakPtr(), id));
+          base::BindOnce(&PermissionContextBase::PermissionDecided,
+                         weak_factory_.GetWeakPtr(), id, requesting_origin,
+                         embedding_origin, std::move(callback)),
+          base::BindOnce(&PermissionContextBase::CleanUpRequest,
+                         weak_factory_.GetWeakPtr(), id));
   PermissionRequest* request = request_ptr.get();
 
   bool inserted =
@@ -357,7 +359,7 @@
     const PermissionRequestID& id,
     const GURL& requesting_origin,
     const GURL& embedding_origin,
-    const BrowserPermissionCallback& callback,
+    BrowserPermissionCallback callback,
     ContentSetting content_setting) {
   DCHECK(content_setting == CONTENT_SETTING_ALLOW ||
          content_setting == CONTENT_SETTING_BLOCK ||
@@ -366,8 +368,8 @@
                              content_setting);
 
   bool persist = content_setting != CONTENT_SETTING_DEFAULT;
-  NotifyPermissionSet(id, requesting_origin, embedding_origin, callback,
-                      persist, content_setting);
+  NotifyPermissionSet(id, requesting_origin, embedding_origin,
+                      std::move(callback), persist, content_setting);
 }
 
 Profile* PermissionContextBase::profile() const {
@@ -378,7 +380,7 @@
     const PermissionRequestID& id,
     const GURL& requesting_origin,
     const GURL& embedding_origin,
-    const BrowserPermissionCallback& callback,
+    BrowserPermissionCallback callback,
     bool persist,
     ContentSetting content_setting) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
@@ -392,7 +394,7 @@
   if (content_setting == CONTENT_SETTING_DEFAULT)
     content_setting = CONTENT_SETTING_ASK;
 
-  callback.Run(content_setting);
+  std::move(callback).Run(content_setting);
 }
 
 void PermissionContextBase::CleanUpRequest(const PermissionRequestID& id) {
diff --git a/chrome/browser/permissions/permission_context_base.h b/chrome/browser/permissions/permission_context_base.h
index 450b4396..d9c7715 100644
--- a/chrome/browser/permissions/permission_context_base.h
+++ b/chrome/browser/permissions/permission_context_base.h
@@ -27,7 +27,7 @@
 class WebContents;
 }
 
-using BrowserPermissionCallback = base::Callback<void(ContentSetting)>;
+using BrowserPermissionCallback = base::OnceCallback<void(ContentSetting)>;
 
 // This base class contains common operations for granting permissions.
 // It offers the following functionality:
@@ -75,7 +75,7 @@
                                  const PermissionRequestID& id,
                                  const GURL& requesting_frame,
                                  bool user_gesture,
-                                 const BrowserPermissionCallback& callback);
+                                 BrowserPermissionCallback callback);
 
   // Returns whether the permission has been granted, denied etc.
   // |render_frame_host| may be nullptr if the call is coming from a context
@@ -115,14 +115,14 @@
                                 const GURL& requesting_origin,
                                 const GURL& embedding_origin,
                                 bool user_gesture,
-                                const BrowserPermissionCallback& callback);
+                                BrowserPermissionCallback callback);
 
   // Updates stored content setting if persist is set, updates tab indicators
   // and runs the callback to finish the request.
   virtual void NotifyPermissionSet(const PermissionRequestID& id,
                                    const GURL& requesting_origin,
                                    const GURL& embedding_origin,
-                                   const BrowserPermissionCallback& callback,
+                                   BrowserPermissionCallback callback,
                                    bool persist,
                                    ContentSetting content_setting);
 
@@ -162,7 +162,7 @@
   void PermissionDecided(const PermissionRequestID& id,
                          const GURL& requesting_origin,
                          const GURL& embedding_origin,
-                         const BrowserPermissionCallback& callback,
+                         BrowserPermissionCallback callback,
                          ContentSetting content_setting);
 
   // Called when the user has made a permission decision. This is a hook for
diff --git a/chrome/browser/permissions/permission_context_base_unittest.cc b/chrome/browser/permissions/permission_context_base_unittest.cc
index 26daecd..4c7744b 100644
--- a/chrome/browser/permissions/permission_context_base_unittest.cc
+++ b/chrome/browser/permissions/permission_context_base_unittest.cc
@@ -87,11 +87,12 @@
                          const PermissionRequestID& id,
                          const GURL& requesting_frame,
                          bool user_gesture,
-                         const BrowserPermissionCallback& callback) override {
+                         BrowserPermissionCallback callback) override {
     base::RunLoop run_loop;
     quit_closure_ = run_loop.QuitClosure();
     PermissionContextBase::RequestPermission(web_contents, id, requesting_frame,
-                                             true /* user_gesture */, callback);
+                                             true /* user_gesture */,
+                                             std::move(callback));
     run_loop.Run();
   }
 
@@ -100,10 +101,10 @@
                         const GURL& requesting_origin,
                         const GURL& embedding_origin,
                         bool user_gesture,
-                        const BrowserPermissionCallback& callback) override {
+                        BrowserPermissionCallback callback) override {
     PermissionContextBase::DecidePermission(web_contents, id, requesting_origin,
                                             embedding_origin, user_gesture,
-                                            callback);
+                                            std::move(callback));
     if (respond_permission_) {
       respond_permission_.Run();
       respond_permission_.Reset();
diff --git a/chrome/browser/permissions/permission_manager.cc b/chrome/browser/permissions/permission_manager.cc
index 7efbe09..3f612a3c 100644
--- a/chrome/browser/permissions/permission_manager.cc
+++ b/chrome/browser/permissions/permission_manager.cc
@@ -142,33 +142,33 @@
 }
 
 void SubscriptionCallbackWrapper(
-    const base::Callback<void(PermissionStatus)>& callback,
+    base::OnceCallback<void(PermissionStatus)> callback,
     ContentSetting content_setting) {
-  callback.Run(ContentSettingToPermissionStatus(content_setting));
+  std::move(callback).Run(ContentSettingToPermissionStatus(content_setting));
 }
 
 void PermissionStatusCallbackWrapper(
-    const base::Callback<void(PermissionStatus)>& callback,
+    base::OnceCallback<void(PermissionStatus)> callback,
     const std::vector<ContentSetting>& vector) {
   DCHECK_EQ(1ul, vector.size());
-  callback.Run(ContentSettingToPermissionStatus(vector[0]));
+  std::move(callback).Run(ContentSettingToPermissionStatus(vector.at(0)));
 }
 
 void PermissionStatusVectorCallbackWrapper(
-    const base::Callback<void(const std::vector<PermissionStatus>&)>& callback,
+    base::OnceCallback<void(const std::vector<PermissionStatus>&)> callback,
     const std::vector<ContentSetting>& content_settings) {
   std::vector<PermissionStatus> permission_statuses;
   std::transform(content_settings.begin(), content_settings.end(),
                  back_inserter(permission_statuses),
                  ContentSettingToPermissionStatus);
-  callback.Run(permission_statuses);
+  std::move(callback).Run(permission_statuses);
 }
 
-void ContentSettingCallbackWraper(
-    const base::Callback<void(ContentSetting)>& callback,
+void ContentSettingCallbackWrapper(
+    base::OnceCallback<void(ContentSetting)> callback,
     const std::vector<ContentSetting>& vector) {
   DCHECK_EQ(1ul, vector.size());
-  callback.Run(vector[0]);
+  std::move(callback).Run(vector.at(0));
 }
 
 }  // anonymous namespace
@@ -178,10 +178,10 @@
   PendingRequest(
       content::RenderFrameHost* render_frame_host,
       const std::vector<ContentSettingsType>& permissions,
-      const base::Callback<void(const std::vector<ContentSetting>&)>& callback)
+      base::OnceCallback<void(const std::vector<ContentSetting>&)> callback)
       : render_process_id_(render_frame_host->GetProcess()->GetID()),
         render_frame_id_(render_frame_host->GetRoutingID()),
-        callback_(callback),
+        callback_(std::move(callback)),
         permissions_(permissions),
         results_(permissions.size(), CONTENT_SETTING_BLOCK),
         remaining_results_(permissions.size()) {}
@@ -200,9 +200,8 @@
   int render_process_id() const { return render_process_id_; }
   int render_frame_id() const { return render_frame_id_; }
 
-  const base::Callback<void(const std::vector<ContentSetting>&)> callback()
-      const {
-    return callback_;
+  base::OnceCallback<void(const std::vector<ContentSetting>&)> TakeCallback() {
+    return std::move(callback_);
   }
 
   std::vector<ContentSettingsType> permissions() const {
@@ -214,7 +213,7 @@
  private:
   int render_process_id_;
   int render_frame_id_;
-  const base::Callback<void(const std::vector<ContentSetting>&)> callback_;
+  base::OnceCallback<void(const std::vector<ContentSetting>&)> callback_;
   std::vector<ContentSettingsType> permissions_;
   std::vector<ContentSetting> results_;
   size_t remaining_results_;
@@ -264,7 +263,7 @@
   GURL requesting_origin;
   int render_frame_id = -1;
   int render_process_id = -1;
-  base::Callback<void(ContentSetting)> callback;
+  base::RepeatingCallback<void(ContentSetting)> callback;
   ContentSetting current_value;
 };
 
@@ -373,11 +372,11 @@
     content::RenderFrameHost* render_frame_host,
     const GURL& requesting_origin,
     bool user_gesture,
-    const base::Callback<void(ContentSetting)>& callback) {
+    base::OnceCallback<void(ContentSetting)> callback) {
   return RequestPermissions(
       std::vector<ContentSettingsType>(1, content_settings_type),
       render_frame_host, requesting_origin, user_gesture,
-      base::Bind(&ContentSettingCallbackWraper, callback));
+      base::BindOnce(&ContentSettingCallbackWrapper, std::move(callback)));
 }
 
 int PermissionManager::RequestPermissions(
@@ -385,10 +384,10 @@
     content::RenderFrameHost* render_frame_host,
     const GURL& requesting_origin,
     bool user_gesture,
-    const base::Callback<void(const std::vector<ContentSetting>&)>& callback) {
+    base::OnceCallback<void(const std::vector<ContentSetting>&)> callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (permissions.empty()) {
-    callback.Run(std::vector<ContentSetting>());
+    std::move(callback).Run(std::vector<ContentSetting>());
     return content::PermissionController::kNoPendingOperation;
   }
 
@@ -400,19 +399,20 @@
       GetCanonicalOrigin(requesting_origin, embedding_origin);
 
   int request_id = pending_requests_.Add(std::make_unique<PendingRequest>(
-      render_frame_host, permissions, callback));
+      render_frame_host, permissions, std::move(callback)));
 
   const PermissionRequestID request(render_frame_host, request_id);
 
   for (size_t i = 0; i < permissions.size(); ++i) {
     const ContentSettingsType permission = permissions[i];
 
-    auto callback =
+    auto response_callback =
         std::make_unique<PermissionResponseCallback>(this, request_id, i);
     auto status = GetPermissionOverrideForDevTools(canonical_requesting_origin,
                                                    permission);
     if (status != CONTENT_SETTING_DEFAULT) {
-      callback->OnPermissionsRequestResponseStatus(CONTENT_SETTING_ALLOW);
+      response_callback->OnPermissionsRequestResponseStatus(
+          CONTENT_SETTING_ALLOW);
       continue;
     }
 
@@ -421,9 +421,9 @@
 
     context->RequestPermission(
         web_contents, request, canonical_requesting_origin, user_gesture,
-        base::Bind(
+        base::BindOnce(
             &PermissionResponseCallback::OnPermissionsRequestResponseStatus,
-            base::Passed(&callback)));
+            std::move(response_callback)));
   }
 
   // The request might have been resolved already.
@@ -464,13 +464,13 @@
     content::RenderFrameHost* render_frame_host,
     const GURL& requesting_origin,
     bool user_gesture,
-    const base::Callback<void(PermissionStatus)>& callback) {
+    base::OnceCallback<void(PermissionStatus)> callback) {
   ContentSettingsType content_settings_type =
       PermissionTypeToContentSetting(permission);
   return RequestPermissions(
       std::vector<ContentSettingsType>(1, content_settings_type),
       render_frame_host, requesting_origin, user_gesture,
-      base::Bind(&PermissionStatusCallbackWrapper, callback));
+      base::BindOnce(&PermissionStatusCallbackWrapper, std::move(callback)));
 }
 
 int PermissionManager::RequestPermissions(
@@ -478,8 +478,7 @@
     content::RenderFrameHost* render_frame_host,
     const GURL& requesting_origin,
     bool user_gesture,
-    const base::Callback<void(const std::vector<PermissionStatus>&)>&
-        callback) {
+    base::OnceCallback<void(const std::vector<PermissionStatus>&)> callback) {
   std::vector<ContentSettingsType> content_settings_types;
   std::transform(permissions.begin(), permissions.end(),
                  back_inserter(content_settings_types),
@@ -487,7 +486,8 @@
   return RequestPermissions(
       content_settings_types, render_frame_host, requesting_origin,
       user_gesture,
-      base::Bind(&PermissionStatusVectorCallbackWrapper, callback));
+      base::BindOnce(&PermissionStatusVectorCallbackWrapper,
+                     std::move(callback)));
 }
 
 PermissionContextBase* PermissionManager::GetPermissionContext(
@@ -509,7 +509,7 @@
   if (!pending_request->IsComplete())
     return;
 
-  pending_request->callback().Run(pending_request->results());
+  pending_request->TakeCallback().Run(pending_request->results());
   pending_requests_.Remove(request_id);
 }
 
@@ -576,7 +576,7 @@
     PermissionType permission,
     content::RenderFrameHost* render_frame_host,
     const GURL& requesting_origin,
-    const base::Callback<void(PermissionStatus)>& callback) {
+    base::RepeatingCallback<void(PermissionStatus)> callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (subscriptions_.IsEmpty())
     HostContentSettingsMapFactory::GetForProfile(profile_)->AddObserver(this);
@@ -608,7 +608,8 @@
   subscription->permission = content_type;
   subscription->requesting_origin =
       GetCanonicalOrigin(requesting_origin, embedding_origin);
-  subscription->callback = base::Bind(&SubscriptionCallbackWrapper, callback);
+  subscription->callback =
+      base::BindRepeating(&SubscriptionCallbackWrapper, std::move(callback));
 
   return subscriptions_.Add(std::move(subscription));
 }
@@ -635,7 +636,8 @@
     ContentSettingsType content_type,
     const std::string& resource_identifier) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  std::list<base::Closure> callbacks;
+  std::vector<base::OnceClosure> callbacks;
+  callbacks.reserve(subscriptions_.size());
 
   for (SubscriptionsMap::iterator iter(&subscriptions_);
        !iter.IsAtEnd(); iter.Advance()) {
@@ -681,11 +683,11 @@
 
     // Add the callback to |callbacks| which will be run after the loop to
     // prevent re-entrance issues.
-    callbacks.push_back(base::Bind(subscription->callback, new_value));
+    callbacks.push_back(base::BindOnce(subscription->callback, new_value));
   }
 
-  for (const auto& callback : callbacks)
-    callback.Run();
+  for (auto& callback : callbacks)
+    std::move(callback).Run();
 }
 
 PermissionResult PermissionManager::GetPermissionStatusHelper(
diff --git a/chrome/browser/permissions/permission_manager.h b/chrome/browser/permissions/permission_manager.h
index f907ae4f1..39ab8575 100644
--- a/chrome/browser/permissions/permission_manager.h
+++ b/chrome/browser/permissions/permission_manager.h
@@ -53,13 +53,13 @@
                         content::RenderFrameHost* render_frame_host,
                         const GURL& requesting_origin,
                         bool user_gesture,
-                        const base::Callback<void(ContentSetting)>& callback);
+                        base::OnceCallback<void(ContentSetting)> callback);
   int RequestPermissions(
       const std::vector<ContentSettingsType>& permissions,
       content::RenderFrameHost* render_frame_host,
       const GURL& requesting_origin,
       bool user_gesture,
-      const base::Callback<void(const std::vector<ContentSetting>&)>& callback);
+      base::OnceCallback<void(const std::vector<ContentSetting>&)> callback);
 
   PermissionResult GetPermissionStatus(ContentSettingsType permission,
                                        const GURL& requesting_origin,
@@ -77,20 +77,19 @@
       const GURL& requesting_origin);
 
   // content::PermissionControllerDelegate implementation.
-  int RequestPermission(
-      content::PermissionType permission,
-      content::RenderFrameHost* render_frame_host,
-      const GURL& requesting_origin,
-      bool user_gesture,
-      const base::Callback<void(blink::mojom::PermissionStatus)>& callback)
-      override;
+  int RequestPermission(content::PermissionType permission,
+                        content::RenderFrameHost* render_frame_host,
+                        const GURL& requesting_origin,
+                        bool user_gesture,
+                        base::OnceCallback<void(blink::mojom::PermissionStatus)>
+                            callback) override;
   int RequestPermissions(
       const std::vector<content::PermissionType>& permissions,
       content::RenderFrameHost* render_frame_host,
       const GURL& requesting_origin,
       bool user_gesture,
-      const base::Callback<
-          void(const std::vector<blink::mojom::PermissionStatus>&)>& callback)
+      base::OnceCallback<
+          void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
       override;
   void ResetPermission(content::PermissionType permission,
                        const GURL& requesting_origin,
@@ -107,7 +106,7 @@
       content::PermissionType permission,
       content::RenderFrameHost* render_frame_host,
       const GURL& requesting_origin,
-      const base::Callback<void(blink::mojom::PermissionStatus)>& callback)
+      base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
       override;
   void UnsubscribePermissionStatusChange(int subscription_id) override;
 
diff --git a/chrome/browser/permissions/permission_request_impl.cc b/chrome/browser/permissions/permission_request_impl.cc
index d4a744b..3eff821f 100644
--- a/chrome/browser/permissions/permission_request_impl.cc
+++ b/chrome/browser/permissions/permission_request_impl.cc
@@ -23,13 +23,13 @@
     const GURL& request_origin,
     ContentSettingsType content_settings_type,
     bool has_gesture,
-    const PermissionDecidedCallback& permission_decided_callback,
-    const base::Closure delete_callback)
+    PermissionDecidedCallback permission_decided_callback,
+    base::OnceClosure delete_callback)
     : request_origin_(request_origin),
       content_settings_type_(content_settings_type),
       has_gesture_(has_gesture),
-      permission_decided_callback_(permission_decided_callback),
-      delete_callback_(delete_callback),
+      permission_decided_callback_(std::move(permission_decided_callback)),
+      delete_callback_(std::move(delete_callback)),
       is_finished_(false) {}
 
 PermissionRequestImpl::~PermissionRequestImpl() {
@@ -175,20 +175,20 @@
 }
 
 void PermissionRequestImpl::PermissionGranted() {
-  permission_decided_callback_.Run(CONTENT_SETTING_ALLOW);
+  std::move(permission_decided_callback_).Run(CONTENT_SETTING_ALLOW);
 }
 
 void PermissionRequestImpl::PermissionDenied() {
-  permission_decided_callback_.Run(CONTENT_SETTING_BLOCK);
+  std::move(permission_decided_callback_).Run(CONTENT_SETTING_BLOCK);
 }
 
 void PermissionRequestImpl::Cancelled() {
-  permission_decided_callback_.Run(CONTENT_SETTING_DEFAULT);
+  std::move(permission_decided_callback_).Run(CONTENT_SETTING_DEFAULT);
 }
 
 void PermissionRequestImpl::RequestFinished() {
   is_finished_ = true;
-  delete_callback_.Run();
+  std::move(delete_callback_).Run();
 }
 
 PermissionRequestType PermissionRequestImpl::GetPermissionRequestType()
diff --git a/chrome/browser/permissions/permission_request_impl.h b/chrome/browser/permissions/permission_request_impl.h
index aa7e4e1..b991ff64 100644
--- a/chrome/browser/permissions/permission_request_impl.h
+++ b/chrome/browser/permissions/permission_request_impl.h
@@ -19,14 +19,13 @@
 // is executed.
 class PermissionRequestImpl : public PermissionRequest {
  public:
-  using PermissionDecidedCallback = base::Callback<void(ContentSetting)>;
+  using PermissionDecidedCallback = base::OnceCallback<void(ContentSetting)>;
 
-  PermissionRequestImpl(
-      const GURL& request_origin,
-      ContentSettingsType content_settings_type,
-      bool has_gesture,
-      const PermissionDecidedCallback& permission_decided_callback,
-      const base::Closure delete_callback);
+  PermissionRequestImpl(const GURL& request_origin,
+                        ContentSettingsType content_settings_type,
+                        bool has_gesture,
+                        PermissionDecidedCallback permission_decided_callback,
+                        base::OnceClosure delete_callback);
 
   ~PermissionRequestImpl() override;
 
@@ -51,11 +50,11 @@
   bool has_gesture_;
 
   // Called once a decision is made about the permission.
-  const PermissionDecidedCallback permission_decided_callback_;
+  PermissionDecidedCallback permission_decided_callback_;
 
   // Called when the request is no longer in use so it can be deleted by the
   // caller.
-  const base::Closure delete_callback_;
+  base::OnceClosure delete_callback_;
   bool is_finished_;
 
   DISALLOW_COPY_AND_ASSIGN(PermissionRequestImpl);