Changeset 61500 in webkit
- Timestamp:
- Jun 19, 2010 5:39:44 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKit2/ChangeLog
r61453 r61500 1 2010-06-19 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Anders Carlsson. 4 5 Fix for https://bugs.webkit.org/show_bug.cgi?id=40882 6 Add ability to have a WebProcess per WebContext. 7 8 - Move to a one-to-one correspondence of WebContexts to WebProcessProxies. 9 - Add explicit shared contexts for general use. 10 - Only non-shared contexts can use injected bundles. 11 12 * UIProcess/API/C/WKContext.cpp: 13 (WKContextCreate): 14 (WKContextCreateWithInjectedBundlePath): 15 (WKContextGetSharedProcessContext): 16 (WKContextGetSharedThreadContext): 17 * UIProcess/API/C/WKContext.h: 18 * UIProcess/API/C/WKContextPrivate.h: 19 Change API for WKContext to no longer take a WKProcessModel type and instead 20 have explicit Create/Get functions for the different kind of contexts. Added 21 two shared contexts, one threaded, one process, and made the threaded on private 22 for now. 23 24 * UIProcess/API/mac/WKView.mm: 25 (-[WKView initWithFrame:]): 26 Make WKViews that don't have an explicit context use the shared process 27 context by default. 28 29 * UIProcess/Launcher/WebProcessLauncher.h: 30 * UIProcess/Launcher/mac/WebProcessLauncher.mm: 31 (WebKit::launchWebProcess): 32 * UIProcess/Launcher/win/WebProcessLauncher.cpp: 33 (WebKit::launchWebProcess): 34 Use a boolean argument to note whether we are using a thread or a process 35 instead of using the process model enum. 36 37 * UIProcess/ProcessModel.h: 38 (WebKit::): 39 Convert to using explicit Shared modifier for shared contexts. 40 41 * UIProcess/WebContext.cpp: 42 (WebKit::WebContext::sharedProcessContext): 43 (WebKit::WebContext::sharedThreadContext): 44 (WebKit::WebContext::ensureWebProcess): 45 (WebKit::WebContext::createWebPage): 46 (WebKit::WebContext::reviveIfNecessary): 47 * UIProcess/WebContext.h: 48 (WebKit::WebContext::create): 49 (WebKit::WebContext::process): 50 * UIProcess/WebPageNamespace.cpp: 51 (WebKit::WebPageNamespace::createWebPage): 52 (WebKit::WebPageNamespace::preferencesDidChange): 53 (WebKit::WebPageNamespace::getStatistics): 54 * UIProcess/WebPageNamespace.h: 55 (WebKit::WebPageNamespace::process): 56 (WebKit::WebPageNamespace::reviveIfNecessary): 57 Move WebProcessProxy creation logic up into WebContext. 58 59 * UIProcess/WebProcessManager.cpp: 60 (WebKit::WebProcessManager::getWebProcess): 61 (WebKit::WebProcessManager::processDidClose): 62 * UIProcess/WebProcessManager.h: 63 Keep a map of WebContexts to WebProcessProxies in addition to the two 64 shared processes. 65 66 * UIProcess/WebProcessProxy.cpp: 67 (WebKit::WebProcessProxy::create): 68 (WebKit::WebProcessProxy::WebProcessProxy): 69 (WebKit::WebProcessProxy::connect): 70 (WebKit::WebProcessProxy::didClose): 71 * UIProcess/WebProcessProxy.h: 72 Store a WebContext instead of the process model. 73 74 * mac/WebKit2.exp: 75 Add new functions. 76 1 77 2010-06-18 Anders Carlsson <andersca@apple.com> 2 78 -
trunk/WebKit2/UIProcess/API/C/WKContext.cpp
r61222 r61500 27 27 #include "WKContextPrivate.h" 28 28 29 #include "ProcessModel.h"30 29 #include "WKAPICast.h" 31 30 #include "WebContext.h" … … 37 36 using namespace WebKit; 38 37 39 static ProcessModel toWK(WKProcessModel wkProcessModel)38 WKContextRef WKContextCreate() 40 39 { 41 switch (wkProcessModel) { 42 case kWKProcessModelSecondaryProcess: 43 return ProcessModelSecondaryProcess; 44 case kWKProcessModelSecondaryThread: 45 return ProcessModelSecondaryThread; 46 default: 47 ASSERT_NOT_REACHED(); 48 } 49 50 // Default to SecondaryProcess if a bad value is passed. 51 return ProcessModelSecondaryProcess; 52 } 53 54 WKContextRef WKContextCreate(WKProcessModel wkProcessModel) 55 { 56 RefPtr<WebContext> context = WebContext::create(toWK(wkProcessModel), WebCore::String()); 40 RefPtr<WebContext> context = WebContext::create(WebCore::String()); 57 41 return toRef(context.release().releaseRef()); 58 42 } 59 43 60 WKContextRef WKContextCreateWithInjectedBundlePath(WK ProcessModel wkProcessModel, WKStringRef pathRef)44 WKContextRef WKContextCreateWithInjectedBundlePath(WKStringRef pathRef) 61 45 { 62 RefPtr<WebContext> context = WebContext::create(toWK( wkProcessModel), toWK(pathRef));46 RefPtr<WebContext> context = WebContext::create(toWK(pathRef)); 63 47 return toRef(context.release().releaseRef()); 48 } 49 50 WKContextRef WKContextGetSharedProcessContext() 51 { 52 return toRef(WebContext::sharedProcessContext()); 53 } 54 55 WKContextRef WKContextGetSharedThreadContext() 56 { 57 return toRef(WebContext::sharedThreadContext()); 64 58 } 65 59 -
trunk/WebKit2/UIProcess/API/C/WKContext.h
r61222 r61500 33 33 #endif 34 34 35 enum { 36 kWKProcessModelSecondaryProcess = 0, 37 kWKProcessModelSecondaryThread = 1 38 }; 39 typedef unsigned long WKProcessModel; 35 WK_EXPORT WKContextRef WKContextCreate(); 36 WK_EXPORT WKContextRef WKContextCreateWithInjectedBundlePath(WKStringRef path); 40 37 41 WK_EXPORT WKContextRef WKContextCreate(WKProcessModel processModel); 42 WK_EXPORT WKContextRef WKContextCreateWithInjectedBundlePath(WKProcessModel processModel, WKStringRef path); 38 WK_EXPORT WKContextRef WKContextGetSharedProcessContext(); 43 39 44 40 WK_EXPORT void WKContextSetPreferences(WKContextRef context, WKPreferencesRef preferences); -
trunk/WebKit2/UIProcess/API/C/WKContextPrivate.h
r58117 r61500 43 43 WK_EXPORT void WKContextGetStatistics(WKContextRef context, WKContextStatistics* statistics); 44 44 45 WK_EXPORT WKContextRef WKContextGetSharedThreadContext(); 46 45 47 #ifdef __cplusplus 46 48 } -
trunk/WebKit2/UIProcess/API/mac/WKView.mm
r61228 r61500 89 89 - (id)initWithFrame:(NSRect)frame 90 90 { 91 RefPtr<WebContext> context = WebContext::create(ProcessModelSecondaryProcess, String());91 WebContext* context = WebContext::sharedProcessContext(); 92 92 self = [self initWithFrame:frame pageNamespaceRef:toRef(context->createPageNamespace())]; 93 93 if (!self) -
trunk/WebKit2/UIProcess/Launcher/WebProcessLauncher.h
r57310 r61500 29 29 #include "Connection.h" 30 30 #include "PlatformProcessIdentifier.h" 31 #include "ProcessModel.h"32 31 #include <wtf/RefPtr.h> 33 32 … … 39 38 }; 40 39 41 ProcessInfo launchWebProcess(CoreIPC::Connection::Client*, ProcessModel);40 ProcessInfo launchWebProcess(CoreIPC::Connection::Client*, bool useThread); 42 41 43 42 } // namespace WebKit -
trunk/WebKit2/UIProcess/Launcher/mac/WebProcessLauncher.mm
r58266 r61500 60 60 } 61 61 62 ProcessInfo launchWebProcess(CoreIPC::Connection::Client* client, ProcessModel processModel)62 ProcessInfo launchWebProcess(CoreIPC::Connection::Client* client, bool useThread) 63 63 { 64 64 ProcessInfo info = { 0, 0 }; … … 74 74 info.connection->open(); 75 75 76 switch (processModel) { 77 case ProcessModelSecondaryThread: { 78 // Pass it to the thread. 79 if (!createThread(webThreadBody, reinterpret_cast<void*>(listeningPort), "WebKit2: WebThread")) { 80 // FIXME: Destroy ports. 81 return info; 82 } 83 } 84 break; 85 case ProcessModelSecondaryProcess: { 86 NSString *webProcessAppPath = [[NSBundle bundleWithIdentifier:@"com.apple.WebKit2"] pathForAuxiliaryExecutable:@"WebProcess.app"]; 87 NSString *webProcessAppExecutablePath = [[NSBundle bundleWithPath:webProcessAppPath] executablePath]; 76 if (useThread) { 77 // Pass it to the thread. 78 if (!createThread(webThreadBody, reinterpret_cast<void*>(listeningPort), "WebKit2: WebThread")) { 79 // FIXME: Destroy ports. 80 return info; 81 } 82 } else { 83 NSString *webProcessAppPath = [[NSBundle bundleWithIdentifier:@"com.apple.WebKit2"] pathForAuxiliaryExecutable:@"WebProcess.app"]; 84 NSString *webProcessAppExecutablePath = [[NSBundle bundleWithPath:webProcessAppPath] executablePath]; 88 85 89 90 86 const char* path = [webProcessAppExecutablePath fileSystemRepresentation]; 87 const char* args[] = { path, 0 }; 91 88 92 // Register ourselves. 93 kern_return_t kr = bootstrap_register2(bootstrap_port, (char*)"com.apple.WebKit.WebProcess", listeningPort, /* BOOTSTRAP_PER_PID_SERVICE */ 1); 94 if (kr) 95 NSLog(@"bootstrap_register2 result: %x", kr); 96 97 int result = posix_spawn(&info.processIdentifier, path, 0, 0, (char *const*)args, *_NSGetEnviron()); 98 if (result) 99 NSLog(@"posix_spawn result: %d", result); 100 } 101 break; 89 // Register ourselves. 90 kern_return_t kr = bootstrap_register2(bootstrap_port, (char*)"com.apple.WebKit.WebProcess", listeningPort, /* BOOTSTRAP_PER_PID_SERVICE */ 1); 91 if (kr) 92 NSLog(@"bootstrap_register2 result: %x", kr); 93 94 int result = posix_spawn(&info.processIdentifier, path, 0, 0, (char *const*)args, *_NSGetEnviron()); 95 if (result) 96 NSLog(@"posix_spawn result: %d", result); 102 97 } 103 98 -
trunk/WebKit2/UIProcess/Launcher/win/WebProcessLauncher.cpp
r61155 r61500 54 54 } 55 55 56 ProcessInfo launchWebProcess(CoreIPC::Connection::Client* client, ProcessModel model)56 ProcessInfo launchWebProcess(CoreIPC::Connection::Client* client, bool useThread) 57 57 { 58 58 ProcessInfo info = { 0, 0 }; … … 61 61 info.connection->open(); 62 62 63 switch (model) { 64 case ProcessModelSecondaryThread: { 65 // FIXME: Pass the handle. 66 if (createThread(webThreadBody, 0, "WebKit2: WebThread")) { 67 info.processIdentifier = ::GetCurrentProcess(); 68 return info; 69 } 70 break; 63 if (useThread) { 64 // FIXME: Pass the handle. 65 if (createThread(webThreadBody, 0, "WebKit2: WebThread")) { 66 info.processIdentifier = ::GetCurrentProcess(); 67 return info; 71 68 } 72 case ProcessModelSecondaryProcess:{73 69 } else { 70 // FIXME: We would like to pass a full path to the .exe here. 74 71 #ifndef DEBUG_ALL 75 72 String commandLine(L"WebKit2WebProcess.exe"); 76 73 #else 77 74 String commandLine(L"WebKit2WebProcess_debug.exe"); 78 75 #endif 79 76 80 81 82 83 84 85 86 87 88 89 77 STARTUPINFO startupInfo = { 0 }; 78 startupInfo.cb = sizeof(startupInfo); 79 PROCESS_INFORMATION processInformation = { 0 }; 80 BOOL result = ::CreateProcessW(0, (LPWSTR)commandLine.charactersWithNullTermination(), 81 0, 0, false, 0, 0, 0, &startupInfo, &processInformation); 82 if (!result) { 83 // FIXME: What should we do here? 84 DWORD error = ::GetLastError(); 85 ASSERT_NOT_REACHED(); 86 } 90 87 91 92 88 // Don't leak the thread handle. 89 ::CloseHandle(processInformation.hThread); 93 90 94 info.processIdentifier = processInformation.hProcess; 95 } 91 info.processIdentifier = processInformation.hProcess; 96 92 } 97 93 -
trunk/WebKit2/UIProcess/ProcessModel.h
r57310 r61500 30 30 31 31 enum ProcessModel { 32 ProcessModelSecondaryProcess, 33 ProcessModelSecondaryThread 32 ProcessModelSharedSecondaryProcess, 33 ProcessModelSharedSecondaryThread, 34 ProcessModelSecondaryProcess 34 35 }; 35 36 -
trunk/WebKit2/UIProcess/WebContext.cpp
r61222 r61500 30 30 #include "WebPreferences.h" 31 31 #include "WebProcessManager.h" 32 #include "WebProcessProxy.h" 32 33 33 34 #include "WKContextPrivate.h" … … 44 45 static WTF::RefCountedLeakCounter webContextCounter("WebContext"); 45 46 #endif 47 48 WebContext* WebContext::sharedProcessContext() 49 { 50 static WebContext* context = new WebContext(ProcessModelSharedSecondaryProcess, String()); 51 return context; 52 } 53 54 WebContext* WebContext::sharedThreadContext() 55 { 56 static WebContext* context = new WebContext(ProcessModelSharedSecondaryThread, String()); 57 return context; 58 } 46 59 47 60 WebContext::WebContext(ProcessModel processModel, const WebCore::String& injectedBundlePath) … … 67 80 webContextCounter.decrement(); 68 81 #endif 82 } 83 84 void WebContext::ensureWebProcess() 85 { 86 if (m_process && m_process->isValid()) 87 return; 88 89 m_process = WebProcessManager::shared().getWebProcess(this); 90 } 91 92 WebPageProxy* WebContext::createWebPage(WebPageNamespace* pageNamespace) 93 { 94 ensureWebProcess(); 95 return m_process->createWebPage(pageNamespace); 96 } 97 98 void WebContext::reviveIfNecessary() 99 { 100 ensureWebProcess(); 69 101 } 70 102 -
trunk/WebKit2/UIProcess/WebContext.h
r61222 r61500 29 29 #include "ProcessModel.h" 30 30 #include <WebCore/PlatformString.h> 31 #include <wtf/Forward.h> 31 32 #include <wtf/HashSet.h> 32 33 #include <wtf/PassRefPtr.h> … … 39 40 40 41 class WebPageNamespace; 42 class WebPageProxy; 41 43 class WebPreferences; 44 class WebProcessProxy; 42 45 43 46 class WebContext : public RefCounted<WebContext> { 44 47 public: 45 static PassRefPtr<WebContext> create(ProcessModel processModel, const WebCore::String& injectedBundlePath) 48 static WebContext* sharedProcessContext(); 49 static WebContext* sharedThreadContext(); 50 51 static PassRefPtr<WebContext> create(const WebCore::String& injectedBundlePath) 46 52 { 47 return adoptRef(new WebContext( processModel, injectedBundlePath));53 return adoptRef(new WebContext(ProcessModelSecondaryProcess, injectedBundlePath)); 48 54 } 55 49 56 ~WebContext(); 50 57 51 58 ProcessModel processModel() const { return m_processModel; } 59 WebProcessProxy* process() const { return m_process.get(); } 60 61 WebPageProxy* createWebPage(WebPageNamespace*); 62 63 void reviveIfNecessary(); 52 64 53 65 WebPageNamespace* createPageNamespace(); … … 65 77 WebContext(ProcessModel, const WebCore::String& injectedBundlePath); 66 78 79 void ensureWebProcess(); 80 67 81 ProcessModel m_processModel; 82 83 // FIXME: In the future, this should be one or more WebProcessProxies. 84 RefPtr<WebProcessProxy> m_process; 85 68 86 HashSet<WebPageNamespace*> m_pageNamespaces; 69 87 RefPtr<WebPreferences> m_preferences; -
trunk/WebKit2/UIProcess/WebPageNamespace.cpp
r61222 r61500 61 61 WebPageProxy* WebPageNamespace::createWebPage() 62 62 { 63 ensureWebProcess(); 64 65 return m_process->createWebPage(this); 66 } 67 68 void WebPageNamespace::ensureWebProcess() 69 { 70 if (m_process && m_process->isValid()) 71 return; 72 73 m_process = WebProcessManager::shared().getWebProcess(m_context->processModel(), m_context->injectedBundlePath()); 74 } 75 76 void WebPageNamespace::reviveIfNecessary() 77 { 78 if (m_process->isValid()) 79 return; 80 81 // FIXME: The WebContext should hand us the new ProcessProxy based on its process model. 82 m_process = WebProcessManager::shared().getWebProcess(m_context->processModel(), m_context->injectedBundlePath()); 63 return m_context->createWebPage(this); 83 64 } 84 65 85 66 void WebPageNamespace::preferencesDidChange() 86 67 { 87 for (WebProcessProxy::pages_const_iterator it = m_process->pages_begin(), end = m_process->pages_end(); it != end; ++it)68 for (WebProcessProxy::pages_const_iterator it = process()->pages_begin(), end = process()->pages_end(); it != end; ++it) 88 69 (*it)->preferencesDidChange(); 89 70 } … … 91 72 void WebPageNamespace::getStatistics(WKContextStatistics* statistics) 92 73 { 93 if (! m_process)74 if (!process()) 94 75 return; 95 76 96 statistics->numberOfWKPages += m_process->numberOfPages();77 statistics->numberOfWKPages += process()->numberOfPages(); 97 78 98 for (WebProcessProxy::pages_const_iterator it = m_process->pages_begin(), end = m_process->pages_end(); it != end; ++it)79 for (WebProcessProxy::pages_const_iterator it = process()->pages_begin(), end = process()->pages_end(); it != end; ++it) 99 80 (*it)->getStatistics(statistics); 100 81 } -
trunk/WebKit2/UIProcess/WebPageNamespace.h
r58117 r61500 28 28 29 29 #include "WebContext.h" 30 #include "WebProcessProxy.h"31 30 #include <wtf/PassRefPtr.h> 32 31 #include <wtf/RefCounted.h> … … 51 50 52 51 WebContext* context() const { return m_context.get(); } 53 WebProcessProxy* process() const { return m_process.get(); } 54 55 void reviveIfNecessary(); 52 WebProcessProxy* process() const { return m_context->process(); } 53 void reviveIfNecessary() { m_context->reviveIfNecessary(); } 56 54 57 55 void preferencesDidChange(); … … 61 59 private: 62 60 WebPageNamespace(WebContext*); 63 64 void ensureWebProcess(); 65 61 66 62 RefPtr<WebContext> m_context; 67 RefPtr<WebProcessProxy> m_process;68 63 }; 69 64 -
trunk/WebKit2/UIProcess/WebProcessManager.cpp
r61222 r61500 26 26 #include "WebProcessManager.h" 27 27 28 #include <WebCore/PlatformString.h> 29 30 using namespace WebCore; 28 #include "WebContext.h" 31 29 32 30 namespace WebKit { … … 42 40 } 43 41 44 WebProcessProxy* WebProcessManager::getWebProcess( ProcessModel processModel, const String& injectedBundlePath)42 WebProcessProxy* WebProcessManager::getWebProcess(WebContext* context) 45 43 { 46 switch ( processModel) {47 case ProcessModelS econdaryProcess:44 switch (context->processModel()) { 45 case ProcessModelSharedSecondaryProcess: { 48 46 if (!m_sharedProcess) 49 m_sharedProcess = WebProcessProxy::create( processModel, injectedBundlePath);47 m_sharedProcess = WebProcessProxy::create(context); 50 48 return m_sharedProcess.get(); 51 case ProcessModelSecondaryThread: 49 } 50 case ProcessModelSharedSecondaryThread: { 52 51 if (!m_sharedThread) 53 m_sharedThread = WebProcessProxy::create( processModel, injectedBundlePath);52 m_sharedThread = WebProcessProxy::create(context); 54 53 return m_sharedThread.get(); 54 } 55 case ProcessModelSecondaryProcess: { 56 std::pair<ProcessMap::iterator, bool> result = m_processMap.add(context, 0); 57 if (result.second) { 58 ASSERT(!result.first->second); 59 result.first->second = WebProcessProxy::create(context); 60 } 61 62 ASSERT(result.first->second); 63 return result.first->second.get(); 64 } 55 65 } 56 57 66 58 67 ASSERT_NOT_REACHED(); 59 68 return 0; 60 69 } 61 62 void WebProcessManager::processDidClose(WebProcessProxy* process )70 71 void WebProcessManager::processDidClose(WebProcessProxy* process, WebContext* context) 63 72 { 64 73 if (process == m_sharedProcess) { 74 ASSERT(context->processModel() == ProcessModelSharedSecondaryProcess); 65 75 m_sharedProcess = 0; 66 76 return; 67 77 } 68 78 79 ProcessMap::iterator it = m_processMap.find(context); 80 if (it != m_processMap.end()) { 81 ASSERT(it->second == process); 82 m_processMap.remove(it); 83 } 84 69 85 // The shared thread connection should never be closed. 70 86 ASSERT_NOT_REACHED(); -
trunk/WebKit2/UIProcess/WebProcessManager.h
r61222 r61500 27 27 #define WebProcessManager_h 28 28 29 #include "ProcessModel.h"30 29 #include "WebProcessProxy.h" 31 30 #include <wtf/HashMap.h> 32 31 #include <wtf/RefPtr.h> 33 32 34 namespace WebCore {35 class String;36 };37 38 33 namespace WebKit { 39 40 class WebProcessProxy;41 class WebPageNamespace;42 34 43 35 class WebProcessManager { … … 45 37 static WebProcessManager& shared(); 46 38 47 WebProcessProxy* getWebProcess(ProcessModel, const WebCore::String& injectedBundlePath); 48 49 void processDidClose(WebProcessProxy*); 39 WebProcessProxy* getWebProcess(WebContext*); 40 void processDidClose(WebProcessProxy*, WebContext*); 50 41 51 42 private: 52 43 WebProcessManager(); 44 53 45 RefPtr<WebProcessProxy> m_sharedThread; 54 46 RefPtr<WebProcessProxy> m_sharedProcess; 47 48 typedef HashMap<WebContext*, RefPtr<WebProcessProxy> > ProcessMap; 49 ProcessMap m_processMap; 55 50 }; 56 51 -
trunk/WebKit2/UIProcess/WebProcessProxy.cpp
r61222 r61500 26 26 #include "WebProcessProxy.h" 27 27 28 #include "WebContext.h" 28 29 #include "WebPageNamespace.h" 29 30 #include "WebPageProxy.h" … … 43 44 } 44 45 45 PassRefPtr<WebProcessProxy> WebProcessProxy::create( ProcessModel processModel, const String& injectedBundlePath)46 PassRefPtr<WebProcessProxy> WebProcessProxy::create(WebContext* context) 46 47 { 47 return adoptRef(new WebProcessProxy( processModel, injectedBundlePath));48 return adoptRef(new WebProcessProxy(context)); 48 49 } 49 50 50 WebProcessProxy::WebProcessProxy( ProcessModel processModel, const String& injectedBundlePath)51 WebProcessProxy::WebProcessProxy(WebContext* context) 51 52 : m_responsivenessTimer(this) 52 , m_ processModel(processModel)53 , m_context(context) 53 54 { 54 55 connect(); … … 56 57 // FIXME: We could instead send the bundle path as part of the arguments to process creation? 57 58 // Would that be better than sending a connection? 58 if (! injectedBundlePath.isEmpty())59 connection()->send(WebProcessMessage::LoadInjectedBundle, 0, CoreIPC::In( injectedBundlePath));59 if (!context->injectedBundlePath().isEmpty()) 60 connection()->send(WebProcessMessage::LoadInjectedBundle, 0, CoreIPC::In(context->injectedBundlePath())); 60 61 } 61 62 … … 67 68 void WebProcessProxy::connect() 68 69 { 69 ProcessInfo info = launchWebProcess(this, m_ processModel);70 ProcessInfo info = launchWebProcess(this, m_context->processModel() == ProcessModelSharedSecondaryThread); 70 71 if (!info.connection) { 71 72 // FIXME: Report an error. … … 165 166 166 167 // This may cause us to be deleted. 167 WebProcessManager::shared().processDidClose(this );168 WebProcessManager::shared().processDidClose(this, m_context); 168 169 } 169 170 -
trunk/WebKit2/UIProcess/WebProcessProxy.h
r61222 r61500 42 42 namespace WebKit { 43 43 44 class WebContext; 44 45 class WebPageNamespace; 45 46 … … 49 50 typedef WebPageProxyMap::const_iterator::Values pages_const_iterator; 50 51 51 static PassRefPtr<WebProcessProxy> create( ProcessModel, const WebCore::String& injectedBundlePath);52 static PassRefPtr<WebProcessProxy> create(WebContext*); 52 53 ~WebProcessProxy(); 53 54 … … 69 70 bool isValid() const { return m_connection; } 70 71 71 ProcessModel processModel() const { return m_processModel; }72 73 72 PlatformProcessIdentifier processIdentifier() const { return m_platformProcessIdentifier; } 74 73 75 74 private: 76 explicit WebProcessProxy( ProcessModel, const WebCore::String& injectedBundlePath);75 explicit WebProcessProxy(WebContext*); 77 76 78 77 void connect(); … … 91 90 PlatformProcessIdentifier m_platformProcessIdentifier; 92 91 93 ProcessModel m_processModel;92 WebContext* m_context; 94 93 95 94 // NOTE: This map is for pages in all WebPageNamespaces that use this process. -
trunk/WebKit2/mac/WebKit2.exp
r61453 r61500 5 5 _WKContextCreate 6 6 _WKContextCreateWithInjectedBundlePath 7 _WKContextGetSharedProcessContext 8 _WKContextGetSharedThreadContext 7 9 _WKContextGetStatistics 8 10 _WKContextRelease -
trunk/WebKit2/win/WebKit2Generated.make
r61222 r61500 5 5 xcopy /y /d "..\UIProcess\API\C\WKBase.h" "$(WEBKITOUTPUTDIR)\include\WebKit2" 6 6 xcopy /y /d "..\UIProcess\API\C\WKContext.h" "$(WEBKITOUTPUTDIR)\include\WebKit2" 7 xcopy /y /d "..\UIProcess\API\C\WKContextPrivate.h" "$(WEBKITOUTPUTDIR)\include\WebKit2" 7 8 xcopy /y /d "..\UIProcess\API\C\WKFrame.h" "$(WEBKITOUTPUTDIR)\include\WebKit2" 8 9 xcopy /y /d "..\UIProcess\API\C\WKFramePolicyListener.h" "$(WEBKITOUTPUTDIR)\include\WebKit2" -
trunk/WebKitTools/ChangeLog
r61478 r61500 1 2010-06-19 Sam Weinig <sam@webkit.org> 2 3 Reviewed by Anders Carlsson. 4 5 Fix for https://bugs.webkit.org/show_bug.cgi?id=40882 6 Add ability to have a WebProcess per WebContext. 7 8 Move to use new shared contexts API. 9 10 * MiniBrowser/mac/AppDelegate.h: 11 * MiniBrowser/mac/AppDelegate.m: 12 (-[BrowserAppDelegate init]): 13 (-[BrowserAppDelegate getCurrentPageNamespace]): 14 (-[BrowserAppDelegate validateMenuItem:]): 15 (-[BrowserAppDelegate _setProcessModel:]): 16 (-[BrowserAppDelegate setSharedProcessProcessModel:]): 17 (-[BrowserAppDelegate setSharedThreadProcessModel:]): 18 * MiniBrowser/win/BrowserView.cpp: 19 (BrowserView::create): 20 1 21 2010-06-02 Robert Hogan <robert@webkit.org> 2 22 -
trunk/WebKitTools/MiniBrowser/mac/AppDelegate.h
r58117 r61500 24 24 */ 25 25 26 enum ProcessModel { 27 kProcessModelSharedSecondaryThread, 28 kProcessModelSharedSecondaryProcess 29 }; 30 typedef unsigned long ProcessModel; 31 26 32 @interface BrowserAppDelegate : NSObject <NSApplicationDelegate> { 27 WKProcessModel currentProcessModel;33 ProcessModel currentProcessModel; 28 34 WKPageNamespaceRef threadPageNamespace; 29 35 WKPageNamespaceRef processPageNamespace; -
trunk/WebKitTools/MiniBrowser/mac/AppDelegate.m
r61222 r61500 30 30 31 31 #import <WebKit2/WKStringCF.h> 32 #import <WebKit2/WKContextPrivate.h> 32 33 33 34 static NSString *defaultURL = @"http://webkit.org/"; … … 40 41 if (self) { 41 42 if ([NSEvent modifierFlags] & NSShiftKeyMask) 42 currentProcessModel = k WKProcessModelSecondaryThread;43 currentProcessModel = kProcessModelSharedSecondaryThread; 43 44 else 44 currentProcessModel = kWKProcessModelSecondaryProcess; 45 currentProcessModel = kProcessModelSharedSecondaryProcess; 46 47 WKContextRef threadContext = WKContextGetSharedThreadContext(); 48 threadPageNamespace = WKPageNamespaceCreate(threadContext); 49 WKContextRelease(threadContext); 45 50 46 51 CFStringRef bundlePathCF = (CFStringRef)[[NSBundle mainBundle] pathForAuxiliaryExecutable:@"WebBundle.bundle"]; 47 52 WKStringRef bundlePath = WKStringCreateWithCFString(bundlePathCF); 48 53 49 WKContextRef threadContext = WKContextCreateWithInjectedBundlePath(kWKProcessModelSecondaryThread, bundlePath); 50 threadPageNamespace = WKPageNamespaceCreate(threadContext); 51 WKContextRelease(threadContext); 52 53 WKContextRef processContext = WKContextCreateWithInjectedBundlePath(kWKProcessModelSecondaryProcess, bundlePath); 54 WKContextRef processContext = WKContextCreateWithInjectedBundlePath(bundlePath); 54 55 processPageNamespace = WKPageNamespaceCreate(processContext); 55 56 WKContextRelease(processContext); … … 71 72 - (WKPageNamespaceRef)getCurrentPageNamespace 72 73 { 73 return (currentProcessModel == k WKProcessModelSecondaryThread) ? threadPageNamespace : processPageNamespace;74 return (currentProcessModel == kProcessModelSharedSecondaryThread) ? threadPageNamespace : processPageNamespace; 74 75 } 75 76 … … 77 78 { 78 79 if ([menuItem action] == @selector(setSharedProcessProcessModel:)) 79 [menuItem setState:currentProcessModel == k WKProcessModelSecondaryProcess ? NSOnState : NSOffState];80 [menuItem setState:currentProcessModel == kProcessModelSharedSecondaryProcess ? NSOnState : NSOffState]; 80 81 else if ([menuItem action] == @selector(setSharedThreadProcessModel:)) 81 [menuItem setState:currentProcessModel == k WKProcessModelSecondaryThread ? NSOnState : NSOffState];82 [menuItem setState:currentProcessModel == kProcessModelSharedSecondaryThread ? NSOnState : NSOffState]; 82 83 return YES; 83 84 } 84 85 85 - (void)_setProcessModel:( WKProcessModel)processModel86 - (void)_setProcessModel:(ProcessModel)processModel 86 87 { 87 88 if (processModel == currentProcessModel) … … 93 94 - (IBAction)setSharedProcessProcessModel:(id)sender 94 95 { 95 [self _setProcessModel:k WKProcessModelSecondaryProcess];96 [self _setProcessModel:kProcessModelSharedSecondaryProcess]; 96 97 } 97 98 98 99 - (IBAction)setSharedThreadProcessModel:(id)sender 99 100 { 100 [self _setProcessModel:k WKProcessModelSecondaryThread];101 [self _setProcessModel:kProcessModelSharedSecondaryThread]; 101 102 } 102 103 -
trunk/WebKitTools/MiniBrowser/win/BrowserView.cpp
r61222 r61500 28 28 29 29 #include "BrowserWindow.h" 30 #include <WebKit2/WKContextPrivate.h> 30 31 #include <WebKit2/WKURLCF.h> 31 32 … … 67 68 bool isShiftKeyDown = ::GetKeyState(VK_SHIFT) & HIGH_BIT_MASK_SHORT; 68 69 69 WKContextRef context = WKContextCreate(isShiftKeyDown ? kWKProcessModelSecondaryThread : kWKProcessModelSecondaryProcess); 70 WKContextRef context; 71 if (isShiftKeyDown) 72 context = WKContextGetSharedThreadContext(); 73 else 74 context = WKContextGetSharedProcessContext(); 75 70 76 WKPageNamespaceRef pageNamespace = WKPageNamespaceCreate(context); 71 77
Note: See TracChangeset
for help on using the changeset viewer.