Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2324)

Unified Diff: android_webview/browser/aw_permission_manager.cc

Issue 1726323002: Have Permission{Manager,Service} use Origin. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « android_webview/browser/aw_permission_manager.h ('k') | blimp/engine/app/blimp_permission_manager.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android_webview/browser/aw_permission_manager.cc
diff --git a/android_webview/browser/aw_permission_manager.cc b/android_webview/browser/aw_permission_manager.cc
index f7e643a2213a18528087dd41927c4ce65f769976..48c20ab9563f7cdc6e09abbfbe0e3af852d66a3e 100644
--- a/android_webview/browser/aw_permission_manager.cc
+++ b/android_webview/browser/aw_permission_manager.cc
@@ -25,24 +25,24 @@ class LastRequestResultCache {
LastRequestResultCache() = default;
void SetResult(PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin,
+ const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin,
PermissionStatus status) {
DCHECK(status == content::mojom::PermissionStatus::GRANTED ||
status == content::mojom::PermissionStatus::DENIED);
// TODO(ddorwin): We should be denying empty origins at a higher level.
- if (requesting_origin.is_empty() || embedding_origin.is_empty()) {
+ if (requesting_origin.empty() || embedding_origin.empty()) {
DLOG(WARNING) << "Not caching result because of empty origin.";
return;
}
- if (!requesting_origin.is_valid()) {
- NOTREACHED() << requesting_origin.possibly_invalid_spec();
+ if (requesting_origin.unique()) {
+ NOTREACHED() << requesting_origin.Serialize();
return;
}
- if (!embedding_origin.is_valid()) {
- NOTREACHED() << embedding_origin.possibly_invalid_spec();
+ if (embedding_origin.unique()) {
+ NOTREACHED() << embedding_origin.Serialize();
return;
}
@@ -62,17 +62,15 @@ class LastRequestResultCache {
}
PermissionStatus GetResult(PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin) const {
+ const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin) const {
// TODO(ddorwin): We should be denying empty origins at a higher level.
if (requesting_origin.is_empty() || embedding_origin.is_empty()) {
return content::mojom::PermissionStatus::ASK;
}
- DCHECK(requesting_origin.is_valid())
- << requesting_origin.possibly_invalid_spec();
- DCHECK(embedding_origin.is_valid())
- << embedding_origin.possibly_invalid_spec();
+ DCHECK(!requesting_origin.unique()) << requesting_origin.Serialize();
+ DCHECK(!embedding_origin.unique()) << embedding_origin.Serialize();
if (permission != PermissionType::PROTECTED_MEDIA_IDENTIFIER) {
NOTREACHED() << "Results are only cached for PROTECTED_MEDIA_IDENTIFIER";
@@ -91,18 +89,15 @@ class LastRequestResultCache {
}
void ClearResult(PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin) {
+ const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin) {
// TODO(ddorwin): We should be denying empty origins at a higher level.
- if (requesting_origin.is_empty() || embedding_origin.is_empty()) {
+ if (requesting_origin.empty() || embedding_origin.empty()) {
return;
}
- DCHECK(requesting_origin.is_valid())
- << requesting_origin.possibly_invalid_spec();
- DCHECK(embedding_origin.is_valid())
- << embedding_origin.possibly_invalid_spec();
-
+ DCHECK(!requesting_origin.unique()) << requesting_origin.Serialize();
+ DCHECK(!embedding_origin.unique()) << embedding_origin.Serialize();
if (permission != PermissionType::PROTECTED_MEDIA_IDENTIFIER) {
// Other permissions are not cached, so nothing to clear.
@@ -116,10 +111,10 @@ class LastRequestResultCache {
private:
// Returns a concatenation of the origins to be used as the index.
// Returns the empty string if either origin is invalid or empty.
- static std::string GetCacheKey(const GURL& requesting_origin,
- const GURL& embedding_origin) {
- const std::string& requesting = requesting_origin.spec();
- const std::string& embedding = embedding_origin.spec();
+ static std::string GetCacheKey(const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin) {
+ const std::string& requesting = requesting_origin.Serialize();
+ const std::string& embedding = embedding_origin.Serialize();
if (requesting.empty() || embedding.empty())
return std::string();
return requesting + "," + embedding;
@@ -134,23 +129,22 @@ class LastRequestResultCache {
struct AwPermissionManager::PendingRequest {
public:
PendingRequest(PermissionType permission,
- GURL requesting_origin,
- GURL embedding_origin,
+ url::Origin requesting_origin,
+ url::Origin embedding_origin,
content::RenderFrameHost* render_frame_host,
const base::Callback<void(PermissionStatus)>& callback)
- : permission(permission),
- requesting_origin(requesting_origin),
- embedding_origin(embedding_origin),
- render_process_id(render_frame_host->GetProcess()->GetID()),
- render_frame_id(render_frame_host->GetRoutingID()),
- callback(callback) {
- }
+ : permission(permission),
+ requesting_origin(requesting_origin),
+ embedding_origin(embedding_origin),
+ render_process_id(render_frame_host->GetProcess()->GetID()),
+ render_frame_id(render_frame_host->GetRoutingID()),
+ callback(callback) {}
~PendingRequest() = default;
PermissionType permission;
- GURL requesting_origin;
- GURL embedding_origin;
+ url::Origin requesting_origin;
+ url::Origin embedding_origin;
int render_process_id;
int render_frame_id;
base::Callback<void(PermissionStatus)> callback;
@@ -168,7 +162,7 @@ AwPermissionManager::~AwPermissionManager() {
int AwPermissionManager::RequestPermission(
PermissionType permission,
content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin,
+ const url::Origin& requesting_origin,
const base::Callback<void(PermissionStatus)>& callback) {
int render_process_id = render_frame_host->GetProcess()->GetID();
int render_frame_id = render_frame_host->GetRoutingID();
@@ -192,9 +186,12 @@ int AwPermissionManager::RequestPermission(
}
}
- const GURL& embedding_origin =
+ const url::Origin embedding_origin(
content::WebContents::FromRenderFrameHost(render_frame_host)
- ->GetLastCommittedURL().GetOrigin();
+ ->GetLastCommittedURL());
+ // TODO(palmer): The delegate->RequestFooPermission functions should take
+ // Origins, not GURLs, but that can come in a later CL.
+ const GURL requesting_url(requesting_origin.Serialize());
int request_id = kNoPendingOperation;
switch (permission) {
@@ -205,10 +202,9 @@ int AwPermissionManager::RequestPermission(
callback));
if (should_delegate_request) {
delegate->RequestGeolocationPermission(
- requesting_origin,
- base::Bind(&OnRequestResponse,
- weak_ptr_factory_.GetWeakPtr(), request_id,
- callback));
+ requesting_url,
+ base::Bind(&OnRequestResponse, weak_ptr_factory_.GetWeakPtr(),
+ request_id, callback));
}
break;
case PermissionType::PROTECTED_MEDIA_IDENTIFIER:
@@ -218,10 +214,9 @@ int AwPermissionManager::RequestPermission(
callback));
if (should_delegate_request) {
delegate->RequestProtectedMediaIdentifierPermission(
- requesting_origin,
- base::Bind(&OnRequestResponse,
- weak_ptr_factory_.GetWeakPtr(), request_id,
- callback));
+ requesting_url,
+ base::Bind(&OnRequestResponse, weak_ptr_factory_.GetWeakPtr(),
+ request_id, callback));
}
break;
case PermissionType::MIDI_SYSEX:
@@ -231,10 +226,9 @@ int AwPermissionManager::RequestPermission(
callback));
if (should_delegate_request) {
delegate->RequestMIDISysexPermission(
- requesting_origin,
- base::Bind(&OnRequestResponse,
- weak_ptr_factory_.GetWeakPtr(), request_id,
- callback));
+ requesting_url,
+ base::Bind(&OnRequestResponse, weak_ptr_factory_.GetWeakPtr(),
+ request_id, callback));
}
break;
case PermissionType::AUDIO_CAPTURE:
@@ -261,15 +255,15 @@ int AwPermissionManager::RequestPermission(
int AwPermissionManager::RequestPermissions(
const std::vector<PermissionType>& permissions,
content::RenderFrameHost* render_frame_host,
- const GURL& requesting_origin,
- const base::Callback<void(
- const std::vector<PermissionStatus>&)>& callback) {
+ const url::Origin& requesting_origin,
+ const base::Callback<void(const std::vector<PermissionStatus>&)>&
+ callback) {
NOTIMPLEMENTED() << "RequestPermissions has not been implemented in WebView";
std::vector<PermissionStatus> result(permissions.size());
- const GURL& embedding_origin =
+ const url::Origin embedding_origin(
content::WebContents::FromRenderFrameHost(render_frame_host)
- ->GetLastCommittedURL().GetOrigin();
+ ->GetLastCommittedURL());
for (PermissionType type : permissions) {
result.push_back(GetPermissionStatus(
@@ -327,8 +321,7 @@ void AwPermissionManager::CancelPermissionRequest(int request_id) {
// The caller is canceling (presumably) the most recent request. Assuming the
// request did not complete, the user did not respond to the requset.
// Thus, assume we do not know the result.
- const GURL& embedding_origin = web_contents
- ->GetLastCommittedURL().GetOrigin();
+ const url::Origin embedding_origin(web_contents->GetLastCommittedURL());
result_cache_->ClearResult(
pending_request->permission,
pending_request->requesting_origin,
@@ -343,18 +336,22 @@ void AwPermissionManager::CancelPermissionRequest(int request_id) {
return;
}
+ // TODO(palmer): The delegate->CancelFooPermission functions should take
+ // Origins, not GURLs, but that can come in a later CL.
+ const GURL requesting_url(requesting_origin.Serialize());
+
switch (pending_request->permission) {
case PermissionType::GEOLOCATION:
delegate->CancelGeolocationPermissionRequests(
- pending_request->requesting_origin);
+ pending_request->requesting_url);
break;
case PermissionType::PROTECTED_MEDIA_IDENTIFIER:
delegate->CancelProtectedMediaIdentifierPermissionRequests(
- pending_request->requesting_origin);
+ pending_request->requesting_url);
break;
case PermissionType::MIDI_SYSEX:
delegate->CancelMIDISysexPermissionRequests(
- pending_request->requesting_origin);
+ pending_request->requesting_url);
break;
case PermissionType::NOTIFICATIONS:
case PermissionType::PUSH_MESSAGING:
@@ -377,15 +374,15 @@ void AwPermissionManager::CancelPermissionRequest(int request_id) {
}
void AwPermissionManager::ResetPermission(PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin) {
+ const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin) {
result_cache_->ClearResult(permission, requesting_origin, embedding_origin);
}
PermissionStatus AwPermissionManager::GetPermissionStatus(
PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin) {
+ const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin) {
// Method is called outside the Permissions API only for this permission.
if (permission == PermissionType::PROTECTED_MEDIA_IDENTIFIER) {
return result_cache_->GetResult(permission, requesting_origin,
@@ -399,14 +396,13 @@ PermissionStatus AwPermissionManager::GetPermissionStatus(
void AwPermissionManager::RegisterPermissionUsage(
PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin) {
-}
+ const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin) {}
int AwPermissionManager::SubscribePermissionStatusChange(
PermissionType permission,
- const GURL& requesting_origin,
- const GURL& embedding_origin,
+ const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin,
const base::Callback<void(PermissionStatus)>& callback) {
return kNoPendingOperation;
}
« no previous file with comments | « android_webview/browser/aw_permission_manager.h ('k') | blimp/engine/app/blimp_permission_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698