bool DatabaseObserver::canEstablishDatabase(ExecutionContext* executionContext, const String& name, const String& displayName, unsigned long estimatedSize) { ASSERT(executionContext->isContextThread()); ASSERT(executionContext->isDocument() || executionContext->isWorkerGlobalScope()); if (executionContext->isDocument()) { Document* document = toDocument(executionContext); WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); if (!webFrame) return false; WebViewImpl* webView = webFrame->viewImpl(); if (!webView) return false; if (webView->permissionClient()) return webView->permissionClient()->allowDatabase(webFrame, name, displayName, estimatedSize); } else { WorkerGlobalScope* workerGlobalScope = toWorkerGlobalScope(executionContext); WorkerPermissionClient* permissionClient = WorkerPermissionClient::from(workerGlobalScope); if (permissionClient->proxy()) return permissionClient->allowDatabase(name, displayName, estimatedSize); // FIXME: Deprecate this bridge code when PermissionClientProxy is // implemented by the embedder. WebWorkerBase* webWorker = static_cast<WebWorkerBase*>(workerGlobalScope->thread()->workerLoaderProxy().toWebWorkerBase()); WebView* view = webWorker->view(); if (!view) return false; return allowDatabaseForWorker(view->mainFrame(), name, displayName, estimatedSize); } return true; }
bool DatabaseObserver::canEstablishDatabase(ScriptExecutionContext* scriptExecutionContext, const String& name, const String& displayName, unsigned long estimatedSize) { ASSERT(scriptExecutionContext->isContextThread()); ASSERT(scriptExecutionContext->isDocument() || scriptExecutionContext->isWorkerContext()); if (scriptExecutionContext->isDocument()) { Document* document = static_cast<Document*>(scriptExecutionContext); WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); if (!webFrame) return false; WebViewImpl* webView = webFrame->viewImpl(); if (!webView) return false; if (webView->permissionClient()) return webView->permissionClient()->allowDatabase(webFrame, name, displayName, estimatedSize); } else { #if ENABLE(WORKERS) WorkerContext* workerContext = static_cast<WorkerContext*>(scriptExecutionContext); WorkerLoaderProxy* workerLoaderProxy = &workerContext->thread()->workerLoaderProxy(); NewWebWorkerBase* webWorker = static_cast<NewWebWorkerBase*>(workerLoaderProxy); return allowDatabaseForWorker(webWorker->newCommonClient(), webWorker->view()->mainFrame(), name, displayName, estimatedSize); #else ASSERT_NOT_REACHED(); #endif } return true; }
bool DatabaseObserver::canEstablishDatabase(ScriptExecutionContext* scriptExecutionContext, const String& name, const String& displayName, unsigned long estimatedSize) { ASSERT(scriptExecutionContext->isContextThread()); ASSERT(scriptExecutionContext->isDocument() || scriptExecutionContext->isWorkerGlobalScope()); if (scriptExecutionContext->isDocument()) { Document* document = toDocument(scriptExecutionContext); WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); if (!webFrame) return false; WebViewImpl* webView = webFrame->viewImpl(); if (!webView) return false; if (webView->permissionClient()) return webView->permissionClient()->allowDatabase(webFrame, name, displayName, estimatedSize); } else { WorkerGlobalScope* workerGlobalScope = toWorkerGlobalScope(scriptExecutionContext); WebWorkerBase* webWorker = static_cast<WebWorkerBase*>(workerGlobalScope->thread()->workerLoaderProxy().toWebWorkerBase()); WebView* view = webWorker->view(); if (!view) return false; return allowDatabaseForWorker(view->mainFrame(), name, displayName, estimatedSize); } return true; }
bool IDBFactoryBackendProxy::allowIndexedDB(ScriptExecutionContext* context, const String& name, const WebSecurityOrigin& origin, PassRefPtr<IDBCallbacks> callbacks) { bool allowed; ASSERT(context->isDocument() || context->isWorkerContext()); if (context->isDocument()) { Document* document = static_cast<Document*>(context); WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); WebViewImpl* webView = webFrame->viewImpl(); // FIXME: webView->permissionClient() returns 0 in test_shell and content_shell http://crbug.com/137269 allowed = !webView->permissionClient() || webView->permissionClient()->allowIndexedDB(webFrame, name, origin); } else { WorkerContext* workerContext = static_cast<WorkerContext*>(context); WebWorkerBase* webWorkerBase = static_cast<WebWorkerBase*>(&workerContext->thread()->workerLoaderProxy()); WorkerRunLoop& runLoop = workerContext->thread()->runLoop(); String mode = allowIndexedDBMode; mode.append(String::number(runLoop.createUniqueId())); RefPtr<AllowIndexedDBMainThreadBridge> bridge = AllowIndexedDBMainThreadBridge::create(webWorkerBase, mode, name); // Either the bridge returns, or the queue gets terminated. if (runLoop.runInMode(workerContext, mode) == MessageQueueTerminated) { bridge->cancel(); allowed = false; } else allowed = bridge->result(); } if (!allowed) callbacks->onError(WebIDBDatabaseError(IDBDatabaseException::UNKNOWN_ERR, "The user denied permission to access the database.")); return allowed; }
void FrameLoaderClientImpl::didNotAllowPlugins() { WebViewImpl* webview = m_webFrame->viewImpl(); if (webview && webview->permissionClient()) webview->permissionClient()->didNotAllowPlugins(m_webFrame); }
bool FrameLoaderClientImpl::allowRunningInsecureContent(bool enabledPerSettings, SecurityOrigin* context, const KURL& url) { WebViewImpl* webview = m_webFrame->viewImpl(); if (webview && webview->permissionClient()) return webview->permissionClient()->allowRunningInsecureContent(m_webFrame, enabledPerSettings, WebSecurityOrigin(context), WebURL(url)); return enabledPerSettings; }
bool FrameLoaderClientImpl::allowImage(bool enabledPerSettings, const KURL& imageURL) { WebViewImpl* webview = m_webFrame->viewImpl(); if (webview && webview->permissionClient()) return webview->permissionClient()->allowImage(m_webFrame, enabledPerSettings, imageURL); return enabledPerSettings; }
bool FrameLoaderClientImpl::allowPlugins(bool enabledPerSettings) { WebViewImpl* webview = m_webFrame->viewImpl(); if (webview && webview->permissionClient()) return webview->permissionClient()->allowPlugins(m_webFrame, enabledPerSettings); return enabledPerSettings; }
bool FrameLoaderClientImpl::allowScriptFromSource(bool enabledPerSettings, const KURL& scriptURL) { WebViewImpl* webview = m_webFrame->viewImpl(); if (webview && webview->permissionClient()) return webview->permissionClient()->allowScriptFromSource(m_webFrame, enabledPerSettings, scriptURL); return enabledPerSettings; }
bool FrameLoaderClientImpl::allowScriptExtension(const String& extensionName, int extensionGroup, int worldId) { WebViewImpl* webview = m_webFrame->viewImpl(); if (webview && webview->permissionClient()) return webview->permissionClient()->allowScriptExtension(m_webFrame, extensionName, extensionGroup, worldId); return true; }
static void allowIndexedDBTask(ScriptExecutionContext*, PassRefPtr<AllowIndexedDBMainThreadBridge> bridge, PassRefPtr<WebFrameImpl> prpWebFrame, const String& name, const String& mode) { RefPtr<WebFrameImpl> webFrame = prpWebFrame; WebViewImpl* webView = webFrame->viewImpl(); if (!webView) { bridge->signalCompleted(false, mode); return; } bool allowed = !webView->permissionClient() || webView->permissionClient()->allowIndexedDB(webFrame.get(), name, WebSecurityOrigin()); bridge->signalCompleted(allowed, mode); }
void IDBFactoryBackendProxy::deleteDatabase(const String& name, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<SecurityOrigin> prpOrigin, Frame* frame, const String& dataDir) { WebSecurityOrigin origin(prpOrigin); WebFrameImpl* webFrame = WebFrameImpl::fromFrame(frame); WebViewImpl* webView = webFrame->viewImpl(); if (webView->permissionClient() && !webView->permissionClient()->allowIndexedDB(webFrame, name, origin)) { callbacks->onError(WebIDBDatabaseError(0, "The user denied permission to access the database.")); return; } m_webIDBFactory->deleteDatabase(name, new WebIDBCallbacksImpl(callbacks), origin, webFrame, dataDir); }
void IDBFactoryBackendProxy::open(const String& name, PassRefPtr<IDBCallbacks> callbacks, PassRefPtr<SecurityOrigin> prpOrigin, Frame* frame, const String& dataDir, int64_t maximumSize, BackingStoreType backingStoreType) { WebSecurityOrigin origin(prpOrigin); WebFrameImpl* webFrame = WebFrameImpl::fromFrame(frame); WebViewImpl* webView = webFrame->viewImpl(); if (webView->permissionClient() && !webView->permissionClient()->allowIndexedDB(webFrame, name, origin)) { callbacks->onError(WebIDBDatabaseError(0, "The user denied permission to access the database.")); return; } m_webIDBFactory->open(name, new WebIDBCallbacksImpl(callbacks), origin, webFrame, dataDir, maximumSize, static_cast<WebIDBFactory::BackingStoreType>(backingStoreType)); }
bool IDBFactoryBackendProxy::allowIndexedDB(ExecutionContext* context, const String& name, const WebSecurityOrigin& origin, PassRefPtr<IDBCallbacks> callbacks) { bool allowed; ASSERT_WITH_SECURITY_IMPLICATION(context->isDocument() || context->isWorkerGlobalScope()); if (context->isDocument()) { Document* document = toDocument(context); WebFrameImpl* webFrame = WebFrameImpl::fromFrame(document->frame()); WebViewImpl* webView = webFrame->viewImpl(); // FIXME: webView->permissionClient() returns 0 in test_shell and content_shell http://crbug.com/137269 allowed = !webView->permissionClient() || webView->permissionClient()->allowIndexedDB(webFrame, name, origin); } else { WorkerGlobalScope* workerGlobalScope = toWorkerGlobalScope(context); WorkerPermissionClient* permissionClient = WorkerPermissionClient::from(workerGlobalScope); if (permissionClient->proxy()) { allowed = permissionClient->allowIndexedDB(name); if (!allowed) callbacks->onError(WebIDBDatabaseError(UnknownError, "The user denied permission to access the database.")); return allowed; } // FIXME: Deprecate this bridge code when PermissionClientProxy is // implemented by the embedder. WebWorkerBase* webWorkerBase = static_cast<WebWorkerBase*>(workerGlobalScope->thread()->workerLoaderProxy().toWebWorkerBase()); WorkerRunLoop& runLoop = workerGlobalScope->thread()->runLoop(); String mode = allowIndexedDBMode; mode.append(String::number(runLoop.createUniqueId())); RefPtr<AllowIndexedDBMainThreadBridge> bridge = AllowIndexedDBMainThreadBridge::create(workerGlobalScope, webWorkerBase, mode, name); // Either the bridge returns, or the queue gets terminated. if (runLoop.runInMode(workerGlobalScope, mode) == MessageQueueTerminated) { bridge->cancel(); return false; } allowed = bridge->result(); } if (!allowed) callbacks->onError(WebIDBDatabaseError(UnknownError, "The user denied permission to access the database.")); return allowed; }