Changeset 242975 in webkit


Ignore:
Timestamp:
Mar 14, 2019 4:08:27 PM (5 years ago)
Author:
youenn@apple.com
Message:

Move IDB storage in private browsing mode to NetworkProcess
https://bugs.webkit.org/show_bug.cgi?id=195602

Reviewed by Brady Eidson.

Source/WebKit:

Covered by existing IDB tests and added API test.

  • NetworkProcess/NetworkProcess.cpp:

(WebKit::NetworkProcess::createIDBServer):
Make sure that path is empty for private sessions.
This will make IDB use a memory backing store.

  • WebProcess/Databases/WebDatabaseProvider.cpp:

(WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
Use NetworkProcess IDB server instead of InProcessIDBServer.

Tools:

  • TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:

(TEST):

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r242968 r242975  
     12019-03-14  Youenn Fablet  <youenn@apple.com>
     2
     3        Move IDB storage in private browsing mode to NetworkProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=195602
     5
     6        Reviewed by Brady Eidson.
     7
     8        Covered by existing IDB tests and added API test.
     9
     10        * NetworkProcess/NetworkProcess.cpp:
     11        (WebKit::NetworkProcess::createIDBServer):
     12        Make sure that path is empty for private sessions.
     13        This will make IDB use a memory backing store.
     14        * WebProcess/Databases/WebDatabaseProvider.cpp:
     15        (WebKit::WebDatabaseProvider::idbConnectionToServerForSession):
     16        Use NetworkProcess IDB server instead of InProcessIDBServer.
     17
    1182019-03-14  Wenson Hsieh  <wenson_hsieh@apple.com>
    219
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r242947 r242975  
    20532053Ref<IDBServer::IDBServer> NetworkProcess::createIDBServer(PAL::SessionID sessionID)
    20542054{
    2055     auto path = m_idbDatabasePaths.get(sessionID);
    2056     // There should already be a registered path for this PAL::SessionID.
    2057     // If there's not, then where did this PAL::SessionID come from?
    2058     ASSERT(!path.isEmpty());
     2055    String path;
     2056    if (!sessionID.isEphemeral()) {
     2057        ASSERT(m_idbDatabasePaths.contains(sessionID));
     2058        path = m_idbDatabasePaths.get(sessionID);
     2059    }
    20592060
    20602061    auto server = IDBServer::IDBServer::create(sessionID, path, *this, [this, weakThis = makeWeakPtr(this)](PAL::SessionID sessionID, const auto& origin) -> StorageQuotaManager* {
  • trunk/Source/WebKit/WebProcess/Databases/WebDatabaseProvider.cpp

    r242911 r242975  
    7070WebCore::IDBClient::IDBConnectionToServer& WebDatabaseProvider::idbConnectionToServerForSession(const PAL::SessionID& sessionID)
    7171{
    72     if (sessionID.isEphemeral()) {
    73         auto result = m_idbEphemeralConnectionMap.add(sessionID.sessionID(), nullptr);
    74         if (result.isNewEntry)
    75             result.iterator->value = WebCore::InProcessIDBServer::create(sessionID);
    76 
    77         return result.iterator->value->connectionToServer();
    78     }
    79 
    8072    return WebProcess::singleton().ensureNetworkProcessConnection().idbConnectionToServerForSession(sessionID).coreConnectionToServer();
    8173}
  • trunk/Source/WebKit/WebProcess/Databases/WebDatabaseProvider.h

    r220857 r242975  
    4545    explicit WebDatabaseProvider(uint64_t identifier);
    4646
    47 #if ENABLE(INDEXED_DATABASE)
    48     HashMap<uint64_t, RefPtr<WebCore::InProcessIDBServer>> m_idbEphemeralConnectionMap;
    49 #endif
    50 
    5147    const uint64_t m_identifier;
    5248};
  • trunk/Tools/ChangeLog

    r242969 r242975  
     12019-03-14  Youenn Fablet  <youenn@apple.com>
     2
     3        Move IDB storage in private browsing mode to NetworkProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=195602
     5
     6        Reviewed by Brady Eidson.
     7
     8        * TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm:
     9        (TEST):
     10
    1112019-03-14  Aakash Jain  <aakash_jain@apple.com>
    212
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/IndexedDBPersistence.mm

    r242339 r242975  
    3232#import <WebKit/WKUserContentControllerPrivate.h>
    3333#import <WebKit/WKWebViewConfigurationPrivate.h>
     34#import <WebKit/WKWebViewPrivate.h>
    3435#import <WebKit/_WKProcessPoolConfiguration.h>
    3536#import <WebKit/_WKUserStyleSheet.h>
     
    9394}
    9495
     96TEST(IndexedDB, IndexedDBPersistencePrivate)
     97{
     98    RetainPtr<IndexedDBMessageHandler> handler = adoptNS([[IndexedDBMessageHandler alloc] init]);
     99    RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     100    [[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
     101
     102    auto ephemeralStore = [WKWebsiteDataStore nonPersistentDataStore];
     103    configuration.get().websiteDataStore = ephemeralStore;
     104
     105    auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     106
     107    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"IndexedDBPersistence-1" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
     108    [webView loadRequest:request];
     109
     110    TestWebKitAPI::Util::run(&receivedScriptMessage);
     111    receivedScriptMessage = false;
     112    RetainPtr<NSString> string1 = (NSString *)[lastScriptMessage body];
     113
     114    TestWebKitAPI::Util::run(&receivedScriptMessage);
     115    receivedScriptMessage = false;
     116    RetainPtr<NSString> string2 = (NSString *)[lastScriptMessage body];
     117
     118    auto webViewPid1 = [webView _webProcessIdentifier];
     119    // Ditch this web view (ditching its web process)
     120    webView = nil;
     121
     122    // Make a new web view to finish the test
     123    webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     124
     125    request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"IndexedDBPersistence-2" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
     126    [webView loadRequest:request];
     127
     128    TestWebKitAPI::Util::run(&receivedScriptMessage);
     129    receivedScriptMessage = false;
     130    RetainPtr<NSString> string3 = (NSString *)[lastScriptMessage body];
     131
     132    auto webViewPid2 = [webView _webProcessIdentifier];
     133    EXPECT_NE(webViewPid1, webViewPid2);
     134
     135    EXPECT_WK_STREQ(@"UpgradeNeeded", string1.get());
     136    EXPECT_WK_STREQ(@"Success", string2.get());
     137    EXPECT_WK_STREQ(@"2 TestObjectStore", string3.get());
     138}
     139
    95140TEST(IndexedDB, IndexedDBDataRemoval)
    96141{
Note: See TracChangeset for help on using the changeset viewer.