Changeset 83499 in webkit
- Timestamp:
- Apr 11, 2011 2:26:28 PM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r83498 r83499 1 2011-04-11 Anders Carlsson <andersca@apple.com> 2 3 Reviewed by Sam Weinig. 4 5 First step towards simplifying WebPageProxy/WebProcessProxy/WebContext ownership 6 https://bugs.webkit.org/show_bug.cgi?id=58266 7 8 With this patch, the WKView holds a strong reference to a WebPageProxy. The 9 WebPageProxy in turn holds a strong reference to its WebProcessProxy. Finally, 10 The WebProcessProxy holds a strong reference to its WebContext. 11 12 The WebContext holds a strong reference to the running WebProcessProxy which results 13 in a reference cycle that's broken when the web process exits. 14 15 The reason for is to avoid crashes where WebPageProxy::process() returns null if the web process 16 has crashed but has not yet been relaunched. 17 18 * UIProcess/WebContext.cpp: 19 (WebKit::WebContext::disconnectProcess): 20 Add comment. 21 22 (WebKit::WebContext::createWebPage): 23 Return a PassRefPtr. 24 25 (WebKit::WebContext::relaunchProcessIfNecessary): 26 Change this to return a WebPageProxy. 27 28 * UIProcess/WebPageProxy.cpp: 29 (WebKit::WebPageProxy::create): 30 This now takes a PassRefPtr<WebProcessProxy>. 31 32 (WebKit::WebPageProxy::WebPageProxy): 33 Ditto. 34 35 (WebKit::WebPageProxy::~WebPageProxy): 36 Call close() if necessary. 37 38 (WebKit::WebPageProxy::reattachToWebProcess): 39 Replace the current process with the new process. 40 41 * UIProcess/WebProcessProxy.cpp: 42 (WebKit::WebProcessProxy::create): 43 Take a PassRefPtr<WebContext>. 44 45 (WebKit::WebProcessProxy::WebProcessProxy): 46 Ditto. 47 48 (WebKit::WebProcessProxy::webPage): 49 Remove .get() now that the page map uses weak references. 50 51 (WebKit::WebProcessProxy::createWebPage): 52 This now returns the created web page proxy. 53 1 54 2011-04-11 Adam Roben <aroben@apple.com> 2 55 -
trunk/Source/WebKit2/UIProcess/WebContext.cpp
r82906 r83499 336 336 #endif 337 337 338 // This can cause the web context to be destroyed. 338 339 m_process = 0; 339 340 } 340 341 341 WebPageProxy*WebContext::createWebPage(PageClient* pageClient, WebPageGroup* pageGroup)342 PassRefPtr<WebPageProxy> WebContext::createWebPage(PageClient* pageClient, WebPageGroup* pageGroup) 342 343 { 343 344 ensureWebProcess(); … … 349 350 } 350 351 351 voidWebContext::relaunchProcessIfNecessary()352 WebProcessProxy* WebContext::relaunchProcessIfNecessary() 352 353 { 353 354 ensureWebProcess(); 355 356 ASSERT(m_process); 357 return m_process.get(); 354 358 } 355 359 -
trunk/Source/WebKit2/UIProcess/WebContext.h
r82906 r83499 85 85 void disconnectProcess(WebProcessProxy*); 86 86 87 WebPageProxy*createWebPage(PageClient*, WebPageGroup*);88 89 voidrelaunchProcessIfNecessary();87 PassRefPtr<WebPageProxy> createWebPage(PageClient*, WebPageGroup*); 88 89 WebProcessProxy* relaunchProcessIfNecessary(); 90 90 91 91 const String& injectedBundlePath() const { return m_injectedBundlePath; } -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r83496 r83499 101 101 #endif 102 102 103 PassRefPtr<WebPageProxy> WebPageProxy::create(PageClient* pageClient, WebContext* context, WebPageGroup* pageGroup, uint64_t pageID)104 { 105 return adoptRef(new WebPageProxy(pageClient, context, pageGroup, pageID));106 } 107 108 WebPageProxy::WebPageProxy(PageClient* pageClient, WebContext* context, WebPageGroup* pageGroup, uint64_t pageID)103 PassRefPtr<WebPageProxy> WebPageProxy::create(PageClient* pageClient, PassRefPtr<WebProcessProxy> process, WebContext* context, WebPageGroup* pageGroup, uint64_t pageID) 104 { 105 return adoptRef(new WebPageProxy(pageClient, process, context, pageGroup, pageID)); 106 } 107 108 WebPageProxy::WebPageProxy(PageClient* pageClient, PassRefPtr<WebProcessProxy> process, WebContext* context, WebPageGroup* pageGroup, uint64_t pageID) 109 109 : m_pageClient(pageClient) 110 , m_process(process) 110 111 , m_context(context) 111 112 , m_pageGroup(pageGroup) … … 163 164 WebPageProxy::~WebPageProxy() 164 165 { 166 if (!m_isClosed) 167 close(); 168 165 169 WebContext::statistics().wkPageCount--; 166 170 … … 240 244 void WebPageProxy::reattachToWebProcess() 241 245 { 246 ASSERT(!isValid()); 247 242 248 m_isValid = true; 243 249 244 context()->relaunchProcessIfNecessary();250 m_process = context()->relaunchProcessIfNecessary(); 245 251 process()->addExistingWebPage(this, m_pageID); 246 252 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r83496 r83499 159 159 static const Type APIType = TypePage; 160 160 161 static PassRefPtr<WebPageProxy> create(PageClient*, WebContext*, WebPageGroup*, uint64_t pageID);161 static PassRefPtr<WebPageProxy> create(PageClient*, PassRefPtr<WebProcessProxy>, WebContext*, WebPageGroup*, uint64_t pageID); 162 162 virtual ~WebPageProxy(); 163 163 … … 496 496 497 497 private: 498 WebPageProxy(PageClient*, WebContext*, WebPageGroup*, uint64_t pageID);498 WebPageProxy(PageClient*, PassRefPtr<WebProcessProxy>, WebContext*, WebPageGroup*, uint64_t pageID); 499 499 500 500 virtual Type type() const { return APIType; } … … 713 713 714 714 OwnPtr<DrawingAreaProxy> m_drawingArea; 715 RefPtr<WebProcessProxy> m_process; 715 716 RefPtr<WebContext> m_context; 716 717 RefPtr<WebPageGroup> m_pageGroup; -
trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp
r83486 r83499 60 60 } 61 61 62 PassRefPtr<WebProcessProxy> WebProcessProxy::create( WebContext*context)62 PassRefPtr<WebProcessProxy> WebProcessProxy::create(PassRefPtr<WebContext> context) 63 63 { 64 64 return adoptRef(new WebProcessProxy(context)); 65 65 } 66 66 67 WebProcessProxy::WebProcessProxy( WebContext*context)67 WebProcessProxy::WebProcessProxy(PassRefPtr<WebContext> context) 68 68 : m_responsivenessTimer(this) 69 69 , m_context(context) … … 164 164 WebPageProxy* WebProcessProxy::webPage(uint64_t pageID) const 165 165 { 166 return m_pageMap.get(pageID) .get();167 } 168 169 WebPageProxy*WebProcessProxy::createWebPage(PageClient* pageClient, WebContext* context, WebPageGroup* pageGroup)166 return m_pageMap.get(pageID); 167 } 168 169 PassRefPtr<WebPageProxy> WebProcessProxy::createWebPage(PageClient* pageClient, WebContext* context, WebPageGroup* pageGroup) 170 170 { 171 171 ASSERT(context->process() == this); 172 172 173 173 unsigned pageID = generatePageID(); 174 RefPtr<WebPageProxy> webPage = WebPageProxy::create(pageClient, context, pageGroup, pageID);175 m_pageMap.set(pageID, webPage );176 return webPage. get();174 RefPtr<WebPageProxy> webPage = WebPageProxy::create(pageClient, this, context, pageGroup, pageID); 175 m_pageMap.set(pageID, webPage.get()); 176 return webPage.release(); 177 177 } 178 178 -
trunk/Source/WebKit2/UIProcess/WebProcessProxy.h
r83498 r83499 57 57 typedef HashMap<uint64_t, RefPtr<WebBackForwardListItem> > WebBackForwardListItemMap; 58 58 59 static PassRefPtr<WebProcessProxy> create( WebContext*);59 static PassRefPtr<WebProcessProxy> create(PassRefPtr<WebContext>); 60 60 ~WebProcessProxy(); 61 61 … … 72 72 } 73 73 74 WebContext* context() const { return m_context ; }74 WebContext* context() const { return m_context.get(); } 75 75 76 76 PlatformProcessIdentifier processIdentifier() const { return m_processLauncher->processIdentifier(); } 77 77 78 78 WebPageProxy* webPage(uint64_t pageID) const; 79 WebPageProxy*createWebPage(PageClient*, WebContext*, WebPageGroup*);79 PassRefPtr<WebPageProxy> createWebPage(PageClient*, WebContext*, WebPageGroup*); 80 80 void addExistingWebPage(WebPageProxy*, uint64_t pageID); 81 81 void removeWebPage(uint64_t pageID); … … 103 103 104 104 private: 105 explicit WebProcessProxy( WebContext*);105 explicit WebProcessProxy(PassRefPtr<WebContext>); 106 106 107 107 // Initializes the process or thread launcher which will begin launching the process. … … 156 156 RefPtr<ThreadLauncher> m_threadLauncher; 157 157 158 WebContext*m_context;158 RefPtr<WebContext> m_context; 159 159 160 HashMap<uint64_t, RefPtr<WebPageProxy>> m_pageMap;160 HashMap<uint64_t, WebPageProxy*> m_pageMap; 161 161 WebFrameProxyMap m_frameMap; 162 162 WebBackForwardListItemMap m_backForwardListItemMap;
Note: See TracChangeset
for help on using the changeset viewer.