HRESULT WebApplicationCache::diskUsageForOrigin(IWebSecurityOrigin* origin, long long* size) { if (!origin || !size) return E_POINTER; COMPtr<WebSecurityOrigin> webSecurityOrigin(Query, origin); if (!webSecurityOrigin) return E_FAIL; *size = storage().diskUsageForOrigin(*webSecurityOrigin->securityOrigin()); return S_OK; }
HRESULT WebApplicationCache::deleteCacheForOrigin(IWebSecurityOrigin* origin) { if (!origin) return E_POINTER; COMPtr<WebSecurityOrigin> webSecurityOrigin(Query, origin); if (!webSecurityOrigin) return E_FAIL; storage().deleteCacheForOrigin(*webSecurityOrigin->securityOrigin()); return S_OK; }
void WebSharedWorkerImpl::startWorkerContext(const WebURL& url, const WebString& name, const WebString& userAgent, const WebString& sourceCode, const WebString& contentSecurityPolicy, WebContentSecurityPolicyType policyType, long long) { initializeLoader(url); WorkerThreadStartMode startMode = m_pauseWorkerContextOnStart ? PauseWorkerGlobalScopeOnStart : DontPauseWorkerGlobalScopeOnStart; OwnPtr<WorkerClients> workerClients = WorkerClients::create(); provideLocalFileSystemToWorker(workerClients.get(), LocalFileSystemClient::create()); provideDatabaseClientToWorker(workerClients.get(), DatabaseClientImpl::create()); WebSecurityOrigin webSecurityOrigin(m_loadingDocument->securityOrigin()); providePermissionClientToWorker(workerClients.get(), adoptPtr(client()->createWorkerPermissionClientProxy(webSecurityOrigin))); OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(url, userAgent, sourceCode, startMode, contentSecurityPolicy, static_cast<WebCore::ContentSecurityPolicy::HeaderType>(policyType), workerClients.release()); setWorkerThread(SharedWorkerThread::create(name, *this, *this, startupData.release())); workerThread()->start(); }
void WebSharedWorkerImpl::onScriptLoaderFinished() { ASSERT(m_loadingDocument); ASSERT(m_mainScriptLoader); if (m_askedToTerminate) return; if (m_mainScriptLoader->failed()) { m_mainScriptLoader->cancel(); m_client->workerScriptLoadFailed(); // The SharedWorker was unable to load the initial script, so // shut it down right here. delete this; return; } Document* document = m_mainFrame->frame()->document(); WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart; if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document)) startMode = PauseWorkerGlobalScopeOnStart; // FIXME: this document's origin is pristine and without any extra privileges. (crbug.com/254993) SecurityOrigin* starterOrigin = document->securityOrigin(); OwnPtrWillBeRawPtr<WorkerClients> workerClients = WorkerClients::create(); provideLocalFileSystemToWorker(workerClients.get(), LocalFileSystemClient::create()); WebSecurityOrigin webSecurityOrigin(m_loadingDocument->securityOrigin()); provideContentSettingsClientToWorker(workerClients.get(), adoptPtr(m_client->createWorkerContentSettingsClientProxy(webSecurityOrigin))); RefPtrWillBeRawPtr<ContentSecurityPolicy> contentSecurityPolicy = m_mainScriptLoader->releaseContentSecurityPolicy(); OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create( m_url, m_loadingDocument->userAgent(), m_mainScriptLoader->script(), nullptr, startMode, contentSecurityPolicy ? contentSecurityPolicy->headers() : nullptr, starterOrigin, workerClients.release()); m_loaderProxy = WorkerLoaderProxy::create(this); setWorkerThread(SharedWorkerThread::create(m_name, m_loaderProxy, *this)); InspectorInstrumentation::scriptImported(m_loadingDocument.get(), m_mainScriptLoader->identifier(), m_mainScriptLoader->script()); m_mainScriptLoader.clear(); workerThread()->start(startupData.release()); m_workerInspectorProxy->workerThreadCreated(m_loadingDocument.get(), workerThread(), m_url); m_client->workerScriptLoaded(); }
void WebSharedWorkerImpl::onScriptLoaderFinished() { DCHECK(m_loadingDocument); DCHECK(m_mainScriptLoader); if (m_askedToTerminate) return; if (m_mainScriptLoader->failed()) { m_mainScriptLoader->cancel(); m_client->workerScriptLoadFailed(); // The SharedWorker was unable to load the initial script, so // shut it down right here. delete this; return; } Document* document = m_mainFrame->frame()->document(); // FIXME: this document's origin is pristine and without any extra privileges. // (crbug.com/254993) SecurityOrigin* starterOrigin = document->getSecurityOrigin(); WorkerClients* workerClients = WorkerClients::create(); provideLocalFileSystemToWorker(workerClients, LocalFileSystemClient::create()); WebSecurityOrigin webSecurityOrigin(m_loadingDocument->getSecurityOrigin()); provideContentSettingsClientToWorker( workerClients, wrapUnique( m_client->createWorkerContentSettingsClientProxy(webSecurityOrigin))); provideIndexedDBClientToWorker(workerClients, IndexedDBClientImpl::create()); ContentSecurityPolicy* contentSecurityPolicy = m_mainScriptLoader->releaseContentSecurityPolicy(); WorkerThreadStartMode startMode = m_workerInspectorProxy->workerStartMode(document); std::unique_ptr<WorkerSettings> workerSettings = wrapUnique(new WorkerSettings(document->settings())); std::unique_ptr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create( m_url, m_loadingDocument->userAgent(), m_mainScriptLoader->script(), nullptr, startMode, contentSecurityPolicy ? contentSecurityPolicy->headers().get() : nullptr, m_mainScriptLoader->referrerPolicy(), starterOrigin, workerClients, m_mainScriptLoader->responseAddressSpace(), m_mainScriptLoader->originTrialTokens(), std::move(workerSettings)); // We have a dummy document here for loading but it doesn't really represent // the document/frame of associated document(s) for this worker. Here we // populate the task runners with null document not to confuse the frame // scheduler (which will end up using the thread's default task runner). m_mainThreadTaskRunners = ParentFrameTaskRunners::create(nullptr); m_loaderProxy = WorkerLoaderProxy::create(this); m_workerThread = SharedWorkerThread::create(m_name, m_loaderProxy, *this); InspectorInstrumentation::scriptImported(m_loadingDocument.get(), m_mainScriptLoader->identifier(), m_mainScriptLoader->script()); m_mainScriptLoader.clear(); workerThread()->start(std::move(startupData)); m_workerInspectorProxy->workerThreadCreated( toDocument(m_loadingDocument.get()), workerThread(), m_url); m_client->workerScriptLoaded(); }