Changeset 243154 in webkit
- Timestamp:
- Mar 19, 2019 11:38:59 AM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r243153 r243154 1 2019-03-19 Chris Dumez <cdumez@apple.com> 2 3 Unreviewed, rolling out r243142. 4 5 Caused assertion hits in WK2 Debug 6 7 Reverted changeset: 8 9 "Spew: Unhandled web process message 10 'VisitedLinkTableController:VisitedLinkStateChanged'" 11 https://bugs.webkit.org/show_bug.cgi?id=194787 12 https://trac.webkit.org/changeset/243142 13 1 14 2019-03-19 Daniel Bates <dabates@apple.com> 2 15 -
trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.cpp
r243142 r243154 100 100 m_process->removeMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_page.pageID()); 101 101 m_process->send(Messages::WebPage::Close(), m_page.pageID()); 102 m_process->removeVisitedLinkStoreUser(m_page.visitedLinkStore(), m_page.pageID());103 102 104 103 RunLoop::main().dispatch([process = m_process.copyRef()] { … … 138 137 } 139 138 139 void ProvisionalPageProxy::processDidFinishLaunching() 140 { 141 RELEASE_LOG_IF_ALLOWED(ProcessSwapping, "processDidFinishLaunching: pageID = %" PRIu64, m_page.pageID()); 142 finishInitializingWebPageAfterProcessLaunch(); 143 } 144 145 void ProvisionalPageProxy::finishInitializingWebPageAfterProcessLaunch() 146 { 147 ASSERT(m_process->state() == WebProcessProxy::State::Running); 148 149 // FIXME: The WebPageProxy delays adding the visited link store until after the process has launched 150 // so the ProvisionalPageProxy does the same. However, do we really need to? 151 m_process->addVisitedLinkStore(m_page.visitedLinkStore()); 152 } 153 140 154 void ProvisionalPageProxy::initializeWebPage() 141 155 { … … 145 159 parameters.isProcessSwap = true; 146 160 m_process->send(Messages::WebProcess::CreateWebPage(m_page.pageID(), parameters), 0); 147 m_process->addVisitedLinkStoreUser(m_page.visitedLinkStore(), m_page.pageID()); 161 162 if (m_process->state() == WebProcessProxy::State::Running) 163 finishInitializingWebPageAfterProcessLaunch(); 148 164 } 149 165 -
trunk/Source/WebKit/UIProcess/ProvisionalPageProxy.h
r243142 r243154 80 80 void cancel(); 81 81 82 void processDidFinishLaunching(); 82 83 void processDidTerminate(); 83 84 void connectionWillOpen(IPC::Connection&); … … 115 116 116 117 void initializeWebPage(); 118 void finishInitializingWebPageAfterProcessLaunch(); 117 119 118 120 WebPageProxy& m_page; -
trunk/Source/WebKit/UIProcess/VisitedLinkStore.cpp
r243142 r243154 43 43 VisitedLinkStore::~VisitedLinkStore() 44 44 { 45 RELEASE_ASSERT(m_processes.isEmpty()); 45 for (WebProcessProxy* process : m_processes) { 46 process->removeMessageReceiver(Messages::VisitedLinkStore::messageReceiverName(), identifier()); 47 process->didDestroyVisitedLinkStore(*this); 48 } 46 49 } 47 50 … … 54 57 { 55 58 ASSERT(process.state() == WebProcessProxy::State::Running); 56 ASSERT(!m_processes.contains(&process));57 59 58 60 if (!m_processes.add(&process).isNewEntry) -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r243142 r243154 820 820 if (isProcessSwap != IsProcessSwap::Yes) 821 821 m_webProcessLifetimeTracker.webPageEnteringWebProcess(m_process); 822 processDidFinishLaunching(); 822 823 } 823 824 … … 958 959 process().send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters(m_process, *m_drawingArea)), 0); 959 960 960 m_process->addVisitedLinkStoreUser(visitedLinkStore(), m_pageID); 961 m_needsToFinishInitializingWebPageAfterProcessLaunch = true; 962 finishInitializingWebPageAfterProcessLaunch(); 963 } 964 965 void WebPageProxy::finishInitializingWebPageAfterProcessLaunch() 966 { 967 if (!m_needsToFinishInitializingWebPageAfterProcessLaunch) 968 return; 969 if (m_process->state() != WebProcessProxy::State::Running) 970 return; 971 972 m_needsToFinishInitializingWebPageAfterProcessLaunch = false; 973 m_process->addVisitedLinkStore(m_visitedLinkStore); 961 974 } 962 975 … … 5101 5114 } 5102 5115 5116 void WebPageProxy::processDidFinishLaunching() 5117 { 5118 ASSERT(m_process->state() == WebProcessProxy::State::Running); 5119 finishInitializingWebPageAfterProcessLaunch(); 5120 } 5121 5103 5122 #if ENABLE(NETSCAPE_PLUGIN_API) 5104 5123 void WebPageProxy::unavailablePluginButtonClicked(uint32_t opaquePluginUnavailabilityReason, const String& mimeType, const String& pluginURLString, const String& pluginspageAttributeURLString, const String& frameURLString, const String& pageURLString) … … 6905 6924 m_hasRunningProcess = false; 6906 6925 m_isPageSuspended = false; 6926 6927 m_needsToFinishInitializingWebPageAfterProcessLaunch = false; 6907 6928 6908 6929 m_editorState = EditorState(); -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r243142 r243154 1234 1234 void webProcessWillShutDown(); 1235 1235 1236 void processDidFinishLaunching(); 1237 1236 1238 void didSaveToPageCache(); 1237 1239 … … 1973 1975 void didResignInputElementStrongPasswordAppearance(const UserData&); 1974 1976 1977 void finishInitializingWebPageAfterProcessLaunch(); 1978 1975 1979 void handleMessage(IPC::Connection&, const String& messageName, const UserData& messageBody); 1976 1980 void handleSynchronousMessage(IPC::Connection&, const String& messageName, const UserData& messageBody, UserData& returnUserData); … … 2222 2226 bool m_canRunModal { false }; 2223 2227 2228 bool m_needsToFinishInitializingWebPageAfterProcessLaunch { false }; 2229 2224 2230 bool m_isInPrintingMode { false }; 2225 2231 bool m_isPerformingDOMPrintOperation { false }; -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r243142 r243154 299 299 m_frameMap.clear(); 300 300 301 for (auto* visitedLinkStore : m_visitedLinkStores WithUsers.keys())301 for (auto* visitedLinkStore : m_visitedLinkStores) 302 302 visitedLinkStore->removeProcess(*this); 303 m_visitedLinkStores WithUsers.clear();303 m_visitedLinkStores.clear(); 304 304 305 305 for (auto* webUserContentControllerProxy : m_webUserContentControllerProxies) … … 393 393 m_processPool->pageEndUsingWebsiteDataStore(webPage.pageID(), webPage.websiteDataStore()); 394 394 395 removeVisitedLinkStoreUser(webPage.visitedLinkStore(), webPage.pageID());396 397 395 updateBackgroundResponsivenessTimer(); 398 396 … … 400 398 } 401 399 402 void WebProcessProxy::addVisitedLinkStoreUser(VisitedLinkStore& visitedLinkStore, uint64_t pageID) 403 { 404 auto users = m_visitedLinkStoresWithUsers.ensure(&visitedLinkStore, [] { 405 return HashSet<uint64_t> { }; 406 }).iterator->value; 407 408 ASSERT(!users.contains(pageID)); 409 users.add(pageID); 410 411 if (users.size() == 1 && state() == State::Running) 412 visitedLinkStore.addProcess(*this); 413 } 414 415 void WebProcessProxy::removeVisitedLinkStoreUser(VisitedLinkStore& visitedLinkStore, uint64_t pageID) 416 { 417 auto it = m_visitedLinkStoresWithUsers.find(&visitedLinkStore); 418 if (it == m_visitedLinkStoresWithUsers.end()) 419 return; 420 421 auto& users = it->value; 422 users.remove(pageID); 423 if (users.isEmpty()) { 424 m_visitedLinkStoresWithUsers.remove(it); 425 visitedLinkStore.removeProcess(*this); 426 } 400 void WebProcessProxy::addVisitedLinkStore(VisitedLinkStore& store) 401 { 402 m_visitedLinkStores.add(&store); 403 store.addProcess(*this); 427 404 } 428 405 … … 431 408 m_webUserContentControllerProxies.add(&proxy); 432 409 proxy.addProcess(*this, parameters); 410 } 411 412 void WebProcessProxy::didDestroyVisitedLinkStore(VisitedLinkStore& store) 413 { 414 ASSERT(m_visitedLinkStores.contains(&store)); 415 m_visitedLinkStores.remove(&store); 433 416 } 434 417 … … 757 740 } 758 741 742 for (WebPageProxy* page : m_pageMap.values()) { 743 ASSERT(this == &page->process()); 744 page->processDidFinishLaunching(); 745 } 746 747 for (auto* provisionalPage : m_provisionalPages) { 748 ASSERT(this == &provisionalPage->process()); 749 provisionalPage->processDidFinishLaunching(); 750 } 751 752 759 753 RELEASE_ASSERT(!m_webConnection); 760 754 m_webConnection = WebConnectionToWebProcess::create(this); 761 755 762 756 m_processPool->processDidFinishLaunching(this); 763 764 for (auto* visitedLinkStore : m_visitedLinkStoresWithUsers.keys())765 visitedLinkStore->addProcess(*this);766 757 767 758 #if PLATFORM(IOS_FAMILY) -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r243142 r243154 147 147 virtual bool isServiceWorkerProcess() const { return false; } 148 148 149 void didCreateWebPageInProcess(uint64_t pageID); 150 151 void addVisitedLinkStoreUser(VisitedLinkStore&, uint64_t pageID); 152 void removeVisitedLinkStoreUser(VisitedLinkStore&, uint64_t pageID); 153 149 void addVisitedLinkStore(VisitedLinkStore&); 154 150 void addWebUserContentControllerProxy(WebUserContentControllerProxy&, WebPageCreationParameters&); 151 void didDestroyVisitedLinkStore(VisitedLinkStore&); 155 152 void didDestroyWebUserContentControllerProxy(WebUserContentControllerProxy&); 156 153 … … 432 429 UserInitiatedActionMap m_userInitiatedActionMap; 433 430 434 Hash Map<VisitedLinkStore*, HashSet<uint64_t/* pageID */>> m_visitedLinkStoresWithUsers;431 HashSet<VisitedLinkStore*> m_visitedLinkStores; 435 432 HashSet<WebUserContentControllerProxy*> m_webUserContentControllerProxies; 436 433
Note: See TracChangeset
for help on using the changeset viewer.