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);