mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Update to Chromium revision cb947c01 (#352221)
- Implement CefRequestHandler::OnBeforeBrowse using NavigationThrottle instead of ResourceThrottle (see http://crbug.com/537634). The CefRequest object passed to OnBeforeBrowse will no longer have an associated request identifier. - Mac: Remove additional helper apps which are no longer required (see http://crbug.com/520680) - Remove the UR_FLAG_REPORT_RAW_HEADERS flag which is no longer supported (see http://crbug.com/517114) - Remove the CefBrowserSettings.java parameter. Java is an NPAPI plugin and NPAPI plugins are no longer supported (see http://crbug.com/470301#c11) - Add CefFormatUrlForSecurityDisplay function in cef_parser.h - Fix crash when passing `--disable-extensions` command-line flag (issue #1721) - Linux: Fix NSS handler loading (issue #1727)
This commit is contained in:
@@ -12,6 +12,8 @@
|
||||
#include "base/callback.h"
|
||||
#include "content/public/browser/geolocation_provider.h"
|
||||
#include "content/public/browser/permission_type.h"
|
||||
#include "content/public/browser/render_frame_host.h"
|
||||
#include "content/public/browser/render_process_host.h"
|
||||
|
||||
namespace {
|
||||
|
||||
@@ -53,6 +55,22 @@ class CefGeolocationCallbackImpl : public CefGeolocationCallback {
|
||||
|
||||
} // namespace
|
||||
|
||||
struct CefPermissionManager::PendingRequest {
|
||||
PendingRequest(content::PermissionType permission,
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
const GURL& requesting_origin)
|
||||
: permission(permission),
|
||||
render_process_id(render_frame_host->GetProcess()->GetID()),
|
||||
render_frame_id(render_frame_host->GetRoutingID()),
|
||||
requesting_origin(requesting_origin) {
|
||||
}
|
||||
|
||||
content::PermissionType permission;
|
||||
int render_process_id;
|
||||
int render_frame_id;
|
||||
GURL requesting_origin;
|
||||
};
|
||||
|
||||
CefPermissionManager::CefPermissionManager()
|
||||
: PermissionManager() {
|
||||
}
|
||||
@@ -60,10 +78,9 @@ CefPermissionManager::CefPermissionManager()
|
||||
CefPermissionManager::~CefPermissionManager() {
|
||||
}
|
||||
|
||||
void CefPermissionManager::RequestPermission(
|
||||
int CefPermissionManager::RequestPermission(
|
||||
content::PermissionType permission,
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
int request_id,
|
||||
const GURL& requesting_origin,
|
||||
bool user_gesture,
|
||||
const base::Callback<void(content::PermissionStatus)>& callback) {
|
||||
@@ -71,11 +88,15 @@ void CefPermissionManager::RequestPermission(
|
||||
|
||||
if (permission != content::PermissionType::GEOLOCATION) {
|
||||
callback.Run(content::PERMISSION_STATUS_DENIED);
|
||||
return;
|
||||
return kNoPendingOperation;
|
||||
}
|
||||
|
||||
bool proceed = false;
|
||||
|
||||
PendingRequest* pending_request = new PendingRequest(
|
||||
permission, render_frame_host, requesting_origin);
|
||||
const int request_id = pending_requests_.Add(pending_request);
|
||||
|
||||
CefRefPtr<CefBrowserHostImpl> browser =
|
||||
CefBrowserHostImpl::GetBrowserForHost(render_frame_host);
|
||||
if (browser.get()) {
|
||||
@@ -97,36 +118,45 @@ void CefPermissionManager::RequestPermission(
|
||||
}
|
||||
}
|
||||
|
||||
if (!proceed) {
|
||||
// Disallow geolocation access by default.
|
||||
callback.Run(content::PERMISSION_STATUS_DENIED);
|
||||
}
|
||||
if (proceed)
|
||||
return request_id;
|
||||
|
||||
pending_requests_.Remove(request_id);
|
||||
|
||||
// Disallow geolocation access by default.
|
||||
callback.Run(content::PERMISSION_STATUS_DENIED);
|
||||
return kNoPendingOperation;
|
||||
}
|
||||
|
||||
void CefPermissionManager::CancelPermissionRequest(
|
||||
content::PermissionType permission,
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
int request_id,
|
||||
const GURL& requesting_origin) {
|
||||
int request_id) {
|
||||
CEF_REQUIRE_UIT();
|
||||
|
||||
if (permission != content::PermissionType::GEOLOCATION)
|
||||
PendingRequest* pending_request = pending_requests_.Lookup(request_id);
|
||||
if (!pending_request)
|
||||
return;
|
||||
|
||||
if (pending_request->permission != content::PermissionType::GEOLOCATION)
|
||||
return;
|
||||
|
||||
CefRefPtr<CefBrowserHostImpl> browser =
|
||||
CefBrowserHostImpl::GetBrowserForHost(render_frame_host);
|
||||
CefBrowserHostImpl::GetBrowserForFrame(pending_request->render_process_id,
|
||||
pending_request->render_frame_id);
|
||||
if (browser.get()) {
|
||||
CefRefPtr<CefClient> client = browser->GetClient();
|
||||
if (client.get()) {
|
||||
CefRefPtr<CefGeolocationHandler> handler =
|
||||
client->GetGeolocationHandler();
|
||||
if (handler.get()) {
|
||||
handler->OnCancelGeolocationPermission(browser.get(),
|
||||
requesting_origin.spec(),
|
||||
request_id);
|
||||
handler->OnCancelGeolocationPermission(
|
||||
browser.get(),
|
||||
pending_request->requesting_origin.spec(),
|
||||
request_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pending_requests_.Remove(request_id);
|
||||
}
|
||||
|
||||
void CefPermissionManager::ResetPermission(
|
||||
|
Reference in New Issue
Block a user