Changeset 249640 in webkit
- Timestamp:
- Sep 9, 2019 2:08:39 AM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h
r241967 r249640 47 47 public: 48 48 WEBCORE_EXPORT static Ref<IDBConnectionToClient> create(IDBConnectionToClientDelegate&); 49 49 50 // FIXME: Use a typed identifier. 50 51 uint64_t identifier() const; 51 52 -
trunk/Source/WebKit/ChangeLog
r249637 r249640 1 2019-09-09 Youenn Fablet <youenn@apple.com> 2 3 Use WebProcess processIdentifier to identify IDB connections between WebProcess and NetworkProcess 4 https://bugs.webkit.org/show_bug.cgi?id=201419 5 6 Reviewed by Alex Christensen. 7 8 We change from an identifier generated by NetworkProcess to WebProcess identifier. 9 A WebProcess identifier is unique globally and is stable even in case of NetworkProcess crash. 10 This removes the need for a sync IPC and makes things more easy to handle in case of NetworkProcess crash. 11 12 * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: 13 (WebKit::WebIDBConnectionToClient::create): 14 (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient): 15 (WebKit::WebIDBConnectionToClient::getAllDatabaseNames): 16 * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h: 17 * NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in: 18 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 19 (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer): 20 * NetworkProcess/NetworkConnectionToWebProcess.h: 21 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 22 * WebKit.xcodeproj/project.pbxproj: 23 * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp: 24 (WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer): 25 (WebKit::WebIDBConnectionToServer::identifier const): 26 (WebKit::WebIDBConnectionToServer::coreConnectionToServer): 27 (WebKit::WebIDBConnectionToServer::getAllDatabaseNames): 28 * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h: 29 * WebProcess/Network/NetworkProcessConnection.cpp: 30 (WebKit::NetworkProcessConnection::didReceiveMessage): 31 (WebKit::NetworkProcessConnection::didClose): 32 (WebKit::NetworkProcessConnection::idbConnectionToServerForSession): 33 * WebProcess/Network/NetworkProcessConnection.h: 34 (WebKit::NetworkProcessConnection::existingIDBConnectionToServer const): 35 * WebProcess/WebProcess.cpp: 36 (WebKit::WebProcess::networkProcessConnectionClosed): 37 1 38 2019-09-09 Youenn Fablet <youenn@apple.com> 2 39 -
trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp
r242281 r249640 45 45 using namespace WebCore; 46 46 47 Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(NetworkProcess& networkProcess, IPC::Connection& connection, uint64_tserverConnectionIdentifier, PAL::SessionID sessionID)47 Ref<WebIDBConnectionToClient> WebIDBConnectionToClient::create(NetworkProcess& networkProcess, IPC::Connection& connection, ProcessIdentifier serverConnectionIdentifier, PAL::SessionID sessionID) 48 48 { 49 49 return adoptRef(*new WebIDBConnectionToClient(networkProcess, connection, serverConnectionIdentifier, sessionID)); 50 50 } 51 51 52 WebIDBConnectionToClient::WebIDBConnectionToClient(NetworkProcess& networkProcess, IPC::Connection& connection, uint64_tserverConnectionIdentifier, PAL::SessionID sessionID)52 WebIDBConnectionToClient::WebIDBConnectionToClient(NetworkProcess& networkProcess, IPC::Connection& connection, ProcessIdentifier serverConnectionIdentifier, PAL::SessionID sessionID) 53 53 : m_connection(connection) 54 54 , m_networkProcess(networkProcess) … … 346 346 } 347 347 348 void WebIDBConnectionToClient::getAllDatabaseNames( uint64_t serverConnectionIdentifier,const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID)349 { 350 m_networkProcess->idbServer(m_sessionID).getAllDatabaseNames( serverConnectionIdentifier, topOrigin, openingOrigin, callbackID);348 void WebIDBConnectionToClient::getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID) 349 { 350 m_networkProcess->idbServer(m_sessionID).getAllDatabaseNames(identifier(), topOrigin, openingOrigin, callbackID); 351 351 } 352 352 -
trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.h
r242281 r249640 32 32 #include <WebCore/IDBConnectionToClient.h> 33 33 #include <WebCore/IndexedDB.h> 34 #include <WebCore/ProcessIdentifier.h> 34 35 #include <pal/SessionID.h> 35 36 … … 56 57 class WebIDBConnectionToClient final : public WebCore::IDBServer::IDBConnectionToClientDelegate, public IPC::MessageSender, public RefCounted<WebIDBConnectionToClient> { 57 58 public: 58 static Ref<WebIDBConnectionToClient> create(NetworkProcess&, IPC::Connection&, uint64_t serverConnectionIdentifier, PAL::SessionID);59 static Ref<WebIDBConnectionToClient> create(NetworkProcess&, IPC::Connection&, WebCore::ProcessIdentifier, PAL::SessionID); 59 60 60 61 virtual ~WebIDBConnectionToClient(); 61 62 62 63 WebCore::IDBServer::IDBConnectionToClient& connectionToClient(); 63 uint64_t identifier() const final { return m_identifier; } 64 uint64_t messageSenderDestinationID() const final { return m_identifier; } 65 66 // IDBConnectionToClientDelegate 67 void didDeleteDatabase(const WebCore::IDBResultData&) final; 68 void didOpenDatabase(const WebCore::IDBResultData&) final; 69 void didAbortTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final; 70 void didCommitTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final; 71 void didCreateObjectStore(const WebCore::IDBResultData&) final; 72 void didDeleteObjectStore(const WebCore::IDBResultData&) final; 73 void didRenameObjectStore(const WebCore::IDBResultData&) final; 74 void didClearObjectStore(const WebCore::IDBResultData&) final; 75 void didCreateIndex(const WebCore::IDBResultData&) final; 76 void didDeleteIndex(const WebCore::IDBResultData&) final; 77 void didRenameIndex(const WebCore::IDBResultData&) final; 78 void didPutOrAdd(const WebCore::IDBResultData&) final; 79 void didGetRecord(const WebCore::IDBResultData&) final; 80 void didGetAllRecords(const WebCore::IDBResultData&) final; 81 void didGetCount(const WebCore::IDBResultData&) final; 82 void didDeleteRecord(const WebCore::IDBResultData&) final; 83 void didOpenCursor(const WebCore::IDBResultData&) final; 84 void didIterateCursor(const WebCore::IDBResultData&) final; 85 86 void fireVersionChangeEvent(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion) final; 87 void didStartTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final; 88 void didCloseFromServer(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBError&) final; 89 void notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion) final; 90 91 void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames) final; 64 uint64_t identifier() const final { return m_identifier.toUInt64(); } 92 65 93 66 void ref() override { RefCounted<WebIDBConnectionToClient>::ref(); } 94 67 void deref() override { RefCounted<WebIDBConnectionToClient>::deref(); } 68 69 void didReceiveMessage(IPC::Connection&, IPC::Decoder&); 70 void disconnectedFromWebProcess(); 71 72 private: 73 WebIDBConnectionToClient(NetworkProcess&, IPC::Connection&, WebCore::ProcessIdentifier, PAL::SessionID); 74 75 IPC::Connection* messageSenderConnection() const final; 76 uint64_t messageSenderDestinationID() const final { return m_sessionID.toUInt64(); } 95 77 96 78 // Messages received from WebProcess … … 123 105 void confirmDidCloseFromServer(uint64_t databaseConnectionIdentifier); 124 106 125 void getAllDatabaseNames( uint64_t serverConnectionIdentifier,const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID);107 void getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID); 126 108 127 void disconnectedFromWebProcess(); 109 // IDBConnectionToClientDelegate 110 void didDeleteDatabase(const WebCore::IDBResultData&) final; 111 void didOpenDatabase(const WebCore::IDBResultData&) final; 112 void didAbortTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final; 113 void didCommitTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final; 114 void didCreateObjectStore(const WebCore::IDBResultData&) final; 115 void didDeleteObjectStore(const WebCore::IDBResultData&) final; 116 void didRenameObjectStore(const WebCore::IDBResultData&) final; 117 void didClearObjectStore(const WebCore::IDBResultData&) final; 118 void didCreateIndex(const WebCore::IDBResultData&) final; 119 void didDeleteIndex(const WebCore::IDBResultData&) final; 120 void didRenameIndex(const WebCore::IDBResultData&) final; 121 void didPutOrAdd(const WebCore::IDBResultData&) final; 122 void didGetRecord(const WebCore::IDBResultData&) final; 123 void didGetAllRecords(const WebCore::IDBResultData&) final; 124 void didGetCount(const WebCore::IDBResultData&) final; 125 void didDeleteRecord(const WebCore::IDBResultData&) final; 126 void didOpenCursor(const WebCore::IDBResultData&) final; 127 void didIterateCursor(const WebCore::IDBResultData&) final; 128 128 129 void didReceiveMessage(IPC::Connection&, IPC::Decoder&); 129 void fireVersionChangeEvent(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion) final; 130 void didStartTransaction(const WebCore::IDBResourceIdentifier& transactionIdentifier, const WebCore::IDBError&) final; 131 void didCloseFromServer(WebCore::IDBServer::UniqueIDBDatabaseConnection&, const WebCore::IDBError&) final; 132 void notifyOpenDBRequestBlocked(const WebCore::IDBResourceIdentifier& requestIdentifier, uint64_t oldVersion, uint64_t newVersion) final; 130 133 131 private: 132 WebIDBConnectionToClient(NetworkProcess&, IPC::Connection&, uint64_t serverConnectionIdentifier, PAL::SessionID); 133 134 IPC::Connection* messageSenderConnection() const final; 134 void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames) final; 135 135 136 136 template<class MessageType> void handleGetResult(const WebCore::IDBResultData&); … … 139 139 Ref<NetworkProcess> m_networkProcess; 140 140 141 uint64_tm_identifier;141 WebCore::ProcessIdentifier m_identifier; 142 142 PAL::SessionID m_sessionID; 143 143 RefPtr<WebCore::IDBServer::IDBConnectionToClient> m_connectionToClient; -
trunk/Source/WebKit/NetworkProcess/IndexedDB/WebIDBConnectionToClient.messages.in
r242281 r249640 52 52 ConfirmDidCloseFromServer(uint64_t databaseConnectionIdentifier); 53 53 54 GetAllDatabaseNames( uint64_t serverConnectionIdentifier,struct WebCore::SecurityOriginData topOrigin, struct WebCore::SecurityOriginData openingOrigin, uint64_t callbackID);54 GetAllDatabaseNames(struct WebCore::SecurityOriginData topOrigin, struct WebCore::SecurityOriginData openingOrigin, uint64_t callbackID); 55 55 } 56 56 #endif // ENABLE(INDEXED_DATABASE) -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r249637 r249640 850 850 851 851 #if ENABLE(INDEXED_DATABASE) 852 static uint64_t generateIDBConnectionToServerIdentifier() 853 { 854 ASSERT(RunLoop::isMain()); 855 static uint64_t identifier = 0; 856 return ++identifier; 857 } 858 859 void NetworkConnectionToWebProcess::establishIDBConnectionToServer(PAL::SessionID sessionID, CompletionHandler<void(uint64_t)>&& completionHandler) 860 { 861 uint64_t serverConnectionIdentifier = generateIDBConnectionToServerIdentifier(); 862 LOG(IndexedDB, "NetworkConnectionToWebProcess::establishIDBConnectionToServer - %" PRIu64, serverConnectionIdentifier); 863 ASSERT(!m_webIDBConnections.contains(serverConnectionIdentifier)); 852 void NetworkConnectionToWebProcess::establishIDBConnectionToServer(PAL::SessionID sessionID) 853 { 854 LOG(IndexedDB, "NetworkConnectionToWebProcess::establishIDBConnectionToServer - %" PRIu64, sessionID.toUInt64()); 855 ASSERT(!m_webIDBConnections.contains(sessionID.toUInt64())); 864 856 865 m_webIDBConnections.set(serverConnectionIdentifier, WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), serverConnectionIdentifier, sessionID)); 866 completionHandler(serverConnectionIdentifier); 857 m_webIDBConnections.add(sessionID.toUInt64(), WebIDBConnectionToClient::create(m_networkProcess, m_connection.get(), m_webProcessIdentifier, sessionID)); 867 858 } 868 859 #endif -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r249603 r249640 205 205 #if ENABLE(INDEXED_DATABASE) 206 206 // Messages handlers (Modern IDB). 207 void establishIDBConnectionToServer(PAL::SessionID , CompletionHandler<void(uint64_t serverConnectionIdentifier)>&&);207 void establishIDBConnectionToServer(PAL::SessionID); 208 208 #endif 209 209 … … 316 316 317 317 #if ENABLE(INDEXED_DATABASE) 318 HashMap<uint64_t, Ref Ptr<WebIDBConnectionToClient>> m_webIDBConnections;318 HashMap<uint64_t, Ref<WebIDBConnectionToClient>> m_webIDBConnections; 319 319 #endif 320 320 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r249501 r249640 78 78 79 79 #if ENABLE(INDEXED_DATABASE) 80 EstablishIDBConnectionToServer(PAL::SessionID sessionID) -> (uint64_t serverConnectionIdentifier) Synchronous80 EstablishIDBConnectionToServer(PAL::SessionID sessionID) 81 81 #endif 82 82 -
trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp
r242281 r249640 49 49 #include <WebCore/IDBTransactionInfo.h> 50 50 #include <WebCore/IDBValue.h> 51 #include <WebCore/ProcessIdentifier.h> 51 52 52 53 namespace WebKit { … … 60 61 WebIDBConnectionToServer::WebIDBConnectionToServer(PAL::SessionID sessionID) 61 62 : m_sessionID(sessionID) 62 { 63 relaxAdoptionRequirement(); 64 65 m_isOpenInServer = sendSync(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer::Reply(m_identifier)); 66 67 m_connectionToServer = IDBClient::IDBConnectionToServer::create(*this); 63 , m_connectionToServer(IDBClient::IDBConnectionToServer::create(*this)) 64 { 65 send(Messages::NetworkConnectionToWebProcess::EstablishIDBConnectionToServer(sessionID), 0); 68 66 } 69 67 … … 72 70 } 73 71 72 uint64_t WebIDBConnectionToServer::identifier() const 73 { 74 return Process::identifier().toUInt64(); 75 } 76 74 77 IPC::Connection* WebIDBConnectionToServer::messageSenderConnection() const 75 78 { … … 79 82 IDBClient::IDBConnectionToServer& WebIDBConnectionToServer::coreConnectionToServer() 80 83 { 81 return *m_connectionToServer;84 return m_connectionToServer; 82 85 } 83 86 … … 214 217 void WebIDBConnectionToServer::getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID) 215 218 { 216 send(Messages::WebIDBConnectionToClient::GetAllDatabaseNames( m_identifier,topOrigin, openingOrigin, callbackID));219 send(Messages::WebIDBConnectionToClient::GetAllDatabaseNames(topOrigin, openingOrigin, callbackID)); 217 220 } 218 221 -
trunk/Source/WebKit/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h
r240955 r249640 31 31 #include "SandboxExtension.h" 32 32 #include <WebCore/IDBConnectionToServer.h> 33 #include <WebCore/ProcessIdentifier.h> 33 34 #include <pal/SessionID.h> 34 35 … … 40 41 public: 41 42 static Ref<WebIDBConnectionToServer> create(PAL::SessionID); 42 43 43 virtual ~WebIDBConnectionToServer(); 44 44 45 45 WebCore::IDBClient::IDBConnectionToServer& coreConnectionToServer(); 46 uint64_t identifier() const final { return m_identifier; } 47 uint64_t messageSenderDestinationID() const final { return m_identifier; } 46 uint64_t identifier() const final; 47 48 void didReceiveMessage(IPC::Connection&, IPC::Decoder&); 49 void connectionToServerLost(); 50 51 void ref() final { RefCounted<WebIDBConnectionToServer>::ref(); } 52 void deref() final { RefCounted<WebIDBConnectionToServer>::deref(); } 53 54 private: 55 explicit WebIDBConnectionToServer(PAL::SessionID); 56 57 IPC::Connection* messageSenderConnection() const final; 58 uint64_t messageSenderDestinationID() const final { return m_sessionID.toUInt64(); } 48 59 49 60 // IDBConnectionToServerDelegate … … 77 88 void getAllDatabaseNames(const WebCore::SecurityOriginData& topOrigin, const WebCore::SecurityOriginData& openingOrigin, uint64_t callbackID) final; 78 89 79 void ref() override { RefCounted<WebIDBConnectionToServer>::ref(); }80 void deref() override { RefCounted<WebIDBConnectionToServer>::deref(); }81 82 90 // Messages received from Network Process 83 91 void didDeleteDatabase(const WebCore::IDBResultData&); … … 105 113 void didGetAllDatabaseNames(uint64_t callbackID, const Vector<String>& databaseNames); 106 114 107 void didReceiveMessage(IPC::Connection&, IPC::Decoder&);108 109 void connectionToServerLost();110 111 private:112 WebIDBConnectionToServer(PAL::SessionID);113 114 IPC::Connection* messageSenderConnection() const final;115 116 uint64_t m_identifier { 0 };117 bool m_isOpenInServer { false };118 RefPtr<WebCore::IDBClient::IDBConnectionToServer> m_connectionToServer;119 115 PAL::SessionID m_sessionID; 116 Ref<WebCore::IDBClient::IDBConnectionToServer> m_connectionToServer; 120 117 }; 121 118 -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
r249479 r249640 130 130 #if ENABLE(INDEXED_DATABASE) 131 131 if (decoder.messageReceiverName() == Messages::WebIDBConnectionToServer::messageReceiverName()) { 132 if (auto idbConnection = m_webIDBConnectionsByIdentifier.get(decoder.destinationID()))132 if (auto* idbConnection = m_webIDBConnectionsBySession.get(decoder.destinationID())) 133 133 idbConnection->didReceiveMessage(connection, decoder); 134 134 return; … … 195 195 196 196 #if ENABLE(INDEXED_DATABASE) 197 for (auto& connection : m_webIDBConnectionsByIdentifier.values()) 197 auto idbConnections = std::exchange(m_webIDBConnectionsBySession, { }); 198 for (auto& connection : idbConnections.values()) 198 199 connection->connectionToServerLost(); 199 200 m_webIDBConnectionsByIdentifier.clear(); 201 m_webIDBConnectionsBySession.clear(); 202 #endif 203 204 #if ENABLE(SERVICE_WORKER) 205 auto connections = std::exchange(m_swConnectionsByIdentifier, { }); 206 for (auto& connection : connections.values()) 200 #endif 201 202 #if ENABLE(SERVICE_WORKER) 203 auto swConnections = std::exchange(m_swConnectionsByIdentifier, { }); 204 for (auto& connection : swConnections.values()) 207 205 connection->connectionToServerLost(); 208 206 #endif … … 253 251 WebIDBConnectionToServer& NetworkProcessConnection::idbConnectionToServerForSession(PAL::SessionID sessionID) 254 252 { 255 return *m_webIDBConnectionsBySession.ensure(sessionID, [&] { 256 auto connection = WebIDBConnectionToServer::create(sessionID); 257 258 auto result = m_webIDBConnectionsByIdentifier.add(connection->identifier(), connection.copyRef()); 259 ASSERT_UNUSED(result, result.isNewEntry); 260 261 return connection; 253 return *m_webIDBConnectionsBySession.ensure(sessionID.toUInt64(), [&] { 254 return WebIDBConnectionToServer::create(sessionID); 262 255 }).iterator->value; 263 256 } -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h
r249479 r249640 72 72 73 73 #if ENABLE(INDEXED_DATABASE) 74 WebIDBConnectionToServer* existingIDBConnectionToServer ForIdentifier(uint64_t identifier) const { return m_webIDBConnectionsByIdentifier.get(identifier); };74 WebIDBConnectionToServer* existingIDBConnectionToServer(PAL::SessionID sessionID) const { return m_webIDBConnectionsBySession.get(sessionID.toUInt64()); }; 75 75 WebIDBConnectionToServer& idbConnectionToServerForSession(PAL::SessionID); 76 76 #endif … … 109 109 110 110 #if ENABLE(INDEXED_DATABASE) 111 HashMap<PAL::SessionID, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsBySession; 112 HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsByIdentifier; 111 HashMap<uint64_t, RefPtr<WebIDBConnectionToServer>> m_webIDBConnectionsBySession; 113 112 #endif 114 113 -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r249608 r249640 1243 1243 continue; 1244 1244 1245 if (connection->existingIDBConnectionToServer ForIdentifier(idbConnection->identifier())) {1246 ASSERT(idbConnection == &connection->existingIDBConnectionToServer ForIdentifier(idbConnection->identifier())->coreConnectionToServer());1245 if (connection->existingIDBConnectionToServer(page->corePage()->sessionID())) { 1246 ASSERT(idbConnection == &connection->existingIDBConnectionToServer(page->corePage()->sessionID())->coreConnectionToServer()); 1247 1247 page->corePage()->clearIDBConnection(); 1248 1248 }
Note: See TracChangeset
for help on using the changeset viewer.