Changeset 121742 in webkit
- Timestamp:
- Jul 3, 2012 1:28:44 AM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r121740 r121742 1 2012-07-03 Charles Wei <charles.wei@torchmobile.com.cn> 2 3 IndexedDB: should make the LevelDB persistant to the directory indicated in PageGroupSettings::indexedDBDataBasePath 4 https://bugs.webkit.org/show_bug.cgi?id=88338 5 6 Reviewed by David Levin. 7 8 If the indexedDB runs in main thread it can access the GroupSettings via the document; 9 otherwise, we need to pass the page GroupSettings to the worker thread so that accessible 10 to the indexedDB running in WorkerContext. 11 12 * Modules/indexeddb/IDBFactory.cpp: 13 (WebCore::IDBFactory::open): 14 * workers/DedicatedWorkerThread.cpp: 15 (WebCore::DedicatedWorkerThread::create): 16 (WebCore::DedicatedWorkerThread::DedicatedWorkerThread): 17 * workers/DedicatedWorkerThread.h: 18 (DedicatedWorkerThread): 19 * workers/DefaultSharedWorkerRepository.cpp: 20 (SharedWorkerProxy): 21 (WebCore::SharedWorkerProxy::groupSettings): 22 (WebCore): 23 (WebCore::DefaultSharedWorkerRepository::workerScriptLoaded): 24 * workers/SharedWorkerThread.cpp: 25 (WebCore::SharedWorkerThread::create): 26 (WebCore::SharedWorkerThread::SharedWorkerThread): 27 * workers/SharedWorkerThread.h: 28 (SharedWorkerThread): 29 * workers/WorkerMessagingProxy.cpp: 30 (WebCore::WorkerMessagingProxy::startWorkerContext): 31 * workers/WorkerThread.cpp: 32 (WebCore::WorkerThreadStartupData::create): 33 (WorkerThreadStartupData): 34 (WebCore::WorkerThreadStartupData::WorkerThreadStartupData): 35 (WebCore::WorkerThread::WorkerThread): 36 (WebCore::WorkerThread::groupSettings): 37 (WebCore): 38 * workers/WorkerThread.h: 39 (WorkerThread): 40 1 41 2012-07-03 Balazs Kelemen <kbalazs@webkit.org> 2 42 -
trunk/Source/WebCore/Modules/indexeddb/IDBFactory.cpp
r121417 r121742 95 95 Frame* frame = document->frame(); 96 96 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), 0); 97 m_backend->open(name, request.get(), context->securityOrigin(), frame, String());97 m_backend->open(name, request.get(), context->securityOrigin(), frame, document->page()->group().groupSettings()->indexedDBDatabasePath()); 98 98 return request; 99 99 } 100 100 #if ENABLE(WORKERS) 101 101 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this), 0); 102 m_backend->openFromWorker(name, request.get(), context->securityOrigin(), static_cast<WorkerContext*>(context), String()); 102 WorkerContext* workerContext = static_cast<WorkerContext*>(context); 103 GroupSettings* groupSettings = workerContext->thread()->groupSettings(); 104 m_backend->openFromWorker(name, request.get(), context->securityOrigin(), workerContext, groupSettings ? groupSettings->indexedDBDatabasePath() : String()); 103 105 return request; 104 106 #else -
trunk/Source/WebCore/workers/DedicatedWorkerThread.cpp
r121417 r121742 40 40 namespace WebCore { 41 41 42 PassRefPtr<DedicatedWorkerThread> DedicatedWorkerThread::create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)42 PassRefPtr<DedicatedWorkerThread> DedicatedWorkerThread::create(const KURL& scriptURL, const String& userAgent, const GroupSettings* settings, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) 43 43 { 44 return adoptRef(new DedicatedWorkerThread(scriptURL, userAgent, s ourceCode, workerLoaderProxy, workerObjectProxy, startMode, contentSecurityPolicy, contentSecurityPolicyType));44 return adoptRef(new DedicatedWorkerThread(scriptURL, userAgent, settings, sourceCode, workerLoaderProxy, workerObjectProxy, startMode, contentSecurityPolicy, contentSecurityPolicyType)); 45 45 } 46 46 47 DedicatedWorkerThread::DedicatedWorkerThread(const KURL& url, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)48 : WorkerThread(url, userAgent, s ourceCode, workerLoaderProxy, workerObjectProxy, startMode, contentSecurityPolicy, contentSecurityPolicyType)47 DedicatedWorkerThread::DedicatedWorkerThread(const KURL& url, const String& userAgent, const GroupSettings* settings, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerObjectProxy& workerObjectProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) 48 : WorkerThread(url, userAgent, settings, sourceCode, workerLoaderProxy, workerObjectProxy, startMode, contentSecurityPolicy, contentSecurityPolicyType) 49 49 , m_workerObjectProxy(workerObjectProxy) 50 50 { -
trunk/Source/WebCore/workers/DedicatedWorkerThread.h
r121417 r121742 42 42 class DedicatedWorkerThread : public WorkerThread { 43 43 public: 44 static PassRefPtr<DedicatedWorkerThread> create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);44 static PassRefPtr<DedicatedWorkerThread> create(const KURL& scriptURL, const String& userAgent, const GroupSettings*, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType); 45 45 WorkerObjectProxy& workerObjectProxy() const { return m_workerObjectProxy; } 46 46 ~DedicatedWorkerThread(); … … 51 51 52 52 private: 53 DedicatedWorkerThread(const KURL&, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);53 DedicatedWorkerThread(const KURL&, const String& userAgent, const GroupSettings*, const String& sourceCode, WorkerLoaderProxy&, WorkerObjectProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType); 54 54 55 55 WorkerObjectProxy& m_workerObjectProxy; -
trunk/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp
r121417 r121742 43 43 #include "MessagePort.h" 44 44 #include "NotImplemented.h" 45 #include "PageGroup.h" 45 46 #include "PlatformString.h" 46 47 #include "ScriptCallStack.h" … … 98 99 void documentDetached(Document*); 99 100 101 GroupSettings* groupSettings() const; // Page GroupSettings used by worker thread. 102 100 103 private: 101 104 SharedWorkerProxy(const String& name, const KURL&, PassRefPtr<SecurityOrigin>); … … 161 164 } 162 165 166 GroupSettings* SharedWorkerProxy::groupSettings() const 167 { 168 if (isClosing()) 169 return 0; 170 ASSERT(m_workerDocuments.size()); 171 // Just pick the first active document, and use the groupsettings of that page. 172 Document* document = *(m_workerDocuments.begin()); 173 if (document->page()) 174 return document->page()->group().groupSettings(); 175 176 return 0; 177 } 178 163 179 static void postExceptionTask(ScriptExecutionContext* context, const String& errorMessage, int lineNumber, const String& sourceURL) 164 180 { … … 344 360 // Another loader may have already started up a thread for this proxy - if so, just send a connect to the pre-existing thread. 345 361 if (!proxy.thread()) { 346 RefPtr<SharedWorkerThread> thread = SharedWorkerThread::create(proxy.name(), proxy.url(), userAgent, workerScript, proxy, proxy, DontPauseWorkerContextOnStart, contentSecurityPolicy, contentSecurityPolicyType);362 RefPtr<SharedWorkerThread> thread = SharedWorkerThread::create(proxy.name(), proxy.url(), userAgent, proxy.groupSettings(), workerScript, proxy, proxy, DontPauseWorkerContextOnStart, contentSecurityPolicy, contentSecurityPolicyType); 347 363 proxy.setThread(thread); 348 364 thread->start(); -
trunk/Source/WebCore/workers/SharedWorkerThread.cpp
r121417 r121742 39 39 namespace WebCore { 40 40 41 PassRefPtr<SharedWorkerThread> SharedWorkerThread::create(const String& name, const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerReportingProxy& workerReportingProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)41 PassRefPtr<SharedWorkerThread> SharedWorkerThread::create(const String& name, const KURL& scriptURL, const String& userAgent, const GroupSettings* settings, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerReportingProxy& workerReportingProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) 42 42 { 43 return adoptRef(new SharedWorkerThread(name, scriptURL, userAgent, s ourceCode, workerLoaderProxy, workerReportingProxy, startMode, contentSecurityPolicy, contentSecurityPolicyType));43 return adoptRef(new SharedWorkerThread(name, scriptURL, userAgent, settings, sourceCode, workerLoaderProxy, workerReportingProxy, startMode, contentSecurityPolicy, contentSecurityPolicyType)); 44 44 } 45 45 46 SharedWorkerThread::SharedWorkerThread(const String& name, const KURL& url, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerReportingProxy& workerReportingProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)47 : WorkerThread(url, userAgent, s ourceCode, workerLoaderProxy, workerReportingProxy, startMode, contentSecurityPolicy, contentSecurityPolicyType)46 SharedWorkerThread::SharedWorkerThread(const String& name, const KURL& url, const String& userAgent, const GroupSettings* settings, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerReportingProxy& workerReportingProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) 47 : WorkerThread(url, userAgent, settings, sourceCode, workerLoaderProxy, workerReportingProxy, startMode, contentSecurityPolicy, contentSecurityPolicyType) 48 48 , m_name(name.isolatedCopy()) 49 49 { -
trunk/Source/WebCore/workers/SharedWorkerThread.h
r121417 r121742 40 40 class SharedWorkerThread : public WorkerThread { 41 41 public: 42 static PassRefPtr<SharedWorkerThread> create(const String& name, const KURL&, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerReportingProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);42 static PassRefPtr<SharedWorkerThread> create(const String& name, const KURL&, const String& userAgent, const GroupSettings*, const String& sourceCode, WorkerLoaderProxy&, WorkerReportingProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType); 43 43 ~SharedWorkerThread(); 44 44 … … 47 47 48 48 private: 49 SharedWorkerThread(const String& name, const KURL&, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerReportingProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);49 SharedWorkerThread(const String& name, const KURL&, const String& userAgent, const GroupSettings*, const String& sourceCode, WorkerLoaderProxy&, WorkerReportingProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType); 50 50 51 51 String m_name; -
trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp
r121417 r121742 43 43 #include "MessageEvent.h" 44 44 #include "NotImplemented.h" 45 #include "PageGroup.h" 45 46 #include "ScriptCallStack.h" 46 47 #include "ScriptExecutionContext.h" … … 273 274 void WorkerMessagingProxy::startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode) 274 275 { 275 RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, sourceCode, *this, *this, startMode, 276 // FIXME: This need to be revisited when we support nested worker one day 277 ASSERT(m_scriptExecutionContext->isDocument()); 278 Document* document = static_cast<Document*>(m_scriptExecutionContext.get()); 279 GroupSettings* settings = 0; 280 if (document->page()) 281 settings = document->page()->group().groupSettings(); 282 RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, settings, sourceCode, *this, *this, startMode, 276 283 m_scriptExecutionContext->contentSecurityPolicy()->deprecatedHeader(), 277 284 m_scriptExecutionContext->contentSecurityPolicy()->deprecatedHeaderType()); -
trunk/Source/WebCore/workers/WorkerThread.cpp
r121417 r121742 72 72 WTF_MAKE_NONCOPYABLE(WorkerThreadStartupData); WTF_MAKE_FAST_ALLOCATED; 73 73 public: 74 static PassOwnPtr<WorkerThreadStartupData> create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)75 { 76 return adoptPtr(new WorkerThreadStartupData(scriptURL, userAgent, s ourceCode, startMode, contentSecurityPolicy, contentSecurityPolicyType));74 static PassOwnPtr<WorkerThreadStartupData> create(const KURL& scriptURL, const String& userAgent, const GroupSettings* settings, const String& sourceCode, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) 75 { 76 return adoptPtr(new WorkerThreadStartupData(scriptURL, userAgent, settings, sourceCode, startMode, contentSecurityPolicy, contentSecurityPolicyType)); 77 77 } 78 78 79 79 KURL m_scriptURL; 80 80 String m_userAgent; 81 OwnPtr<GroupSettings> m_groupSettings; 81 82 String m_sourceCode; 82 83 WorkerThreadStartMode m_startMode; … … 84 85 ContentSecurityPolicy::HeaderType m_contentSecurityPolicyType; 85 86 private: 86 WorkerThreadStartupData(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType);87 WorkerThreadStartupData(const KURL& scriptURL, const String& userAgent, const GroupSettings*, const String& sourceCode, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType); 87 88 }; 88 89 89 WorkerThreadStartupData::WorkerThreadStartupData(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)90 WorkerThreadStartupData::WorkerThreadStartupData(const KURL& scriptURL, const String& userAgent, const GroupSettings* settings, const String& sourceCode, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) 90 91 : m_scriptURL(scriptURL.copy()) 91 92 , m_userAgent(userAgent.isolatedCopy()) … … 95 96 , m_contentSecurityPolicyType(contentSecurityPolicyType) 96 97 { 97 } 98 99 WorkerThread::WorkerThread(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerReportingProxy& workerReportingProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) 98 if (!settings) 99 return; 100 101 m_groupSettings = GroupSettings::create(); 102 m_groupSettings->setLocalStorageQuotaBytes(settings->localStorageQuotaBytes()); 103 m_groupSettings->setIndexedDBQuotaBytes(settings->indexedDBQuotaBytes()); 104 m_groupSettings->setIndexedDBDatabasePath(settings->indexedDBDatabasePath().isolatedCopy()); 105 } 106 107 WorkerThread::WorkerThread(const KURL& scriptURL, const String& userAgent, const GroupSettings* settings, const String& sourceCode, WorkerLoaderProxy& workerLoaderProxy, WorkerReportingProxy& workerReportingProxy, WorkerThreadStartMode startMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType) 100 108 : m_threadID(0) 101 109 , m_workerLoaderProxy(workerLoaderProxy) 102 110 , m_workerReportingProxy(workerReportingProxy) 103 , m_startupData(WorkerThreadStartupData::create(scriptURL, userAgent, s ourceCode, startMode, contentSecurityPolicy, contentSecurityPolicyType))111 , m_startupData(WorkerThreadStartupData::create(scriptURL, userAgent, settings, sourceCode, startMode, contentSecurityPolicy, contentSecurityPolicyType)) 104 112 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) 105 113 , m_notificationClient(0) … … 186 194 } 187 195 196 GroupSettings* WorkerThread::groupSettings() 197 { 198 return m_startupData->m_groupSettings.get(); 199 } 200 188 201 class WorkerThreadShutdownFinishTask : public ScriptExecutionContext::Task { 189 202 public: -
trunk/Source/WebCore/workers/WorkerThread.h
r121417 r121742 31 31 32 32 #include "ContentSecurityPolicy.h" 33 #include "GroupSettings.h" 33 34 #include "WorkerRunLoop.h" 34 35 #include <wtf/Forward.h> … … 62 63 // Number of active worker threads. 63 64 static unsigned workerThreadCount(); 65 GroupSettings* groupSettings(); 64 66 65 67 #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) … … 69 71 70 72 protected: 71 WorkerThread(const KURL&, const String& userAgent, const String& sourceCode, WorkerLoaderProxy&, WorkerReportingProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);73 WorkerThread(const KURL&, const String& userAgent, const GroupSettings*, const String& sourceCode, WorkerLoaderProxy&, WorkerReportingProxy&, WorkerThreadStartMode, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType); 72 74 73 75 // Factory method for creating a new worker context for the thread. -
trunk/Source/WebKit/chromium/ChangeLog
r121721 r121742 1 2012-07-03 Charles Wei <charles.wei@torchmobile.com.cn> 2 3 IndexedDB: should make the LevelDB persistant to the directory indicated in PageGroupSettings::indexedDBDataBasePath 4 https://bugs.webkit.org/show_bug.cgi?id=88338 5 6 Reviewed by David Levin. 7 8 * src/WebSharedWorkerImpl.cpp: 9 (WebKit::WebSharedWorkerImpl::startWorkerContext): 10 * src/WebWorkerClientImpl.cpp: 11 (WebKit::WebWorkerClientImpl::startWorkerContext): 12 1 13 2012-07-02 Sheriff Bot <webkit.review.bot@gmail.com> 2 14 -
trunk/Source/WebKit/chromium/src/WebSharedWorkerImpl.cpp
r121417 r121742 35 35 #include "DatabaseTask.h" 36 36 #include "Document.h" 37 #include "GroupSettings.h" 37 38 #include "KURL.h" 38 39 #include "MessageEvent.h" 39 40 #include "MessagePortChannel.h" 41 #include "Page.h" 42 #include "PageGroup.h" 40 43 #include "PlatformMessagePortChannel.h" 41 44 #include "SecurityOrigin.h" … … 367 370 initializeLoader(url); 368 371 WorkerThreadStartMode startMode = m_pauseWorkerContextOnStart ? PauseWorkerContextOnStart : DontPauseWorkerContextOnStart; 369 setWorkerThread(SharedWorkerThread::create(name, url, userAgent, sourceCode, *this, *this, startMode, contentSecurityPolicy, 372 ASSERT(m_loadingDocument->isDocument()); 373 Document* document = static_cast<Document*>(m_loadingDocument.get()); 374 GroupSettings* settings = 0; 375 if (document->page()) 376 settings = document->page()->group().groupSettings(); 377 setWorkerThread(SharedWorkerThread::create(name, url, userAgent, settings, 378 sourceCode, *this, *this, startMode, contentSecurityPolicy, 370 379 static_cast<WebCore::ContentSecurityPolicy::HeaderType>(policyType))); 371 380 -
trunk/Source/WebKit/chromium/src/WebWorkerClientImpl.cpp
r121417 r121742 40 40 #include "Frame.h" 41 41 #include "FrameLoaderClient.h" 42 #include "GroupSettings.h" 42 43 #include "InspectorInstrumentation.h" 43 44 #include "MessageEvent.h" 44 45 #include "MessagePort.h" 45 46 #include "MessagePortChannel.h" 47 #include "Page.h" 48 #include "PageGroup.h" 46 49 #include "ScriptCallStack.h" 47 50 #include "ScriptExecutionContext.h" … … 87 90 void WebWorkerClientImpl::startWorkerContext(const KURL& scriptURL, const String& userAgent, const String& sourceCode, WorkerThreadStartMode startMode) 88 91 { 89 RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, sourceCode, *this, *this, startMode, 92 ASSERT(m_scriptExecutionContext->isDocument()); 93 Document* document = static_cast<Document*>(m_scriptExecutionContext.get()); 94 GroupSettings* settings = 0; 95 if (document->page()) 96 settings = document->page()->group().groupSettings(); 97 RefPtr<DedicatedWorkerThread> thread = DedicatedWorkerThread::create(scriptURL, userAgent, settings, sourceCode, *this, *this, startMode, 90 98 m_scriptExecutionContext->contentSecurityPolicy()->deprecatedHeader(), 91 99 m_scriptExecutionContext->contentSecurityPolicy()->deprecatedHeaderType());
Note: See TracChangeset
for help on using the changeset viewer.