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