| Differences between
and this patch
- a/Source/WebCore/ChangeLog +21 lines
Lines 1-3 a/Source/WebCore/ChangeLog_sec1
1
2015-05-05  Daniel Bates  <dabates@apple.com>
2
3
        [iOS][WK2] Pause/resume database thread when UIProcess enters/leaves the background
4
        https://bugs.webkit.org/show_bug.cgi?id=144657
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Export WebCore functionality to pause and resume the database thread so that we can
9
        make use of this functionality from WebKit2.
10
11
        * Modules/webdatabase/AbstractDatabaseServer.h:
12
        * Modules/webdatabase/DatabaseManager.cpp:
13
        (WebCore::DatabaseManager::setPauseAllDatabases): Added; turns around and calls DatabaseServer::setPauseAllDatabases().
14
        * Modules/webdatabase/DatabaseManager.h:
15
        * Modules/webdatabase/DatabaseServer.cpp:
16
        (WebCore::DatabaseServer::setPauseAllDatabases): Added; turns around and calls
17
        DatabaseTracker::tracker().setDatabasesPaused() to pause or resume the database thread.
18
        For now, we guard this call with PLATFORM(IOS). We'll look to remove this guard once
19
        we fix <https://bugs.webkit.org/show_bug.cgi?id=144660>.
20
        * Modules/webdatabase/DatabaseServer.h:
21
1
2015-05-04  Javier Fernandez  <jfernandez@igalia.com>
22
2015-05-04  Javier Fernandez  <jfernandez@igalia.com>
2
23
3
        [CSS Box Alignment] Upgrade justify-content parsing to CSS3 Box Alignment spec.
24
        [CSS Box Alignment] Upgrade justify-content parsing to CSS3 Box Alignment spec.
- a/Source/WebKit2/ChangeLog +29 lines
Lines 1-3 a/Source/WebKit2/ChangeLog_sec1
1
2015-05-05  Daniel Bates  <dabates@apple.com>
2
3
        [iOS][WK2] Pause/resume database thread when UIProcess enters/leaves the background
4
        https://bugs.webkit.org/show_bug.cgi?id=144657
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Pause and resume the database thread when the UIProcess enters and leaves the background,
9
        respectively, so that we avoid WebProcess termination due to holding a locked SQLite
10
        database file when the WebProcess is suspended. This behavior matches the analagous
11
        behavior in Legacy WebKit.
12
13
        * UIProcess/WebPageProxy.h:
14
        * UIProcess/ios/WKContentView.mm:
15
        (-[WKContentView _applicationDidEnterBackground:]): Call WebPageProxy::applicationDidEnterBackground()
16
        when the UIProcess enters the background.
17
        * UIProcess/ios/WebPageProxyIOS.mm:
18
        (WebKit::WebPageProxy::applicationDidEnterBackground): Added; pause the database thread.
19
        * WebProcess/WebCoreSupport/WebDatabaseManager.cpp:
20
        (WebKit::WebDatabaseManager::setPauseAllDatabases): Added; turns around and calls DatabaseManager::setPauseAllDatabases().
21
        * WebProcess/WebCoreSupport/WebDatabaseManager.h:
22
        * WebProcess/WebPage/WebPage.h:
23
        * WebProcess/WebPage/WebPage.messages.in: Add message ApplicationDidEnterBackground(). Also,
24
        add empty lines to help demarcate this message and the other UIKit application lifecycle-related
25
        messages from the rest of the list of messages.
26
        * WebProcess/WebPage/ios/WebPageIOS.mm:
27
        (WebKit::WebPage::applicationWillEnterForeground): Resume the database thread.
28
        (WebKit::WebPage::applicationDidEnterBackground): Pause the database thread.
29
1
2015-05-04  Zan Dobersek  <zdobersek@igalia.com>
30
2015-05-04  Zan Dobersek  <zdobersek@igalia.com>
2
31
3
        [WTF] Remove Functional.h inclusions
32
        [WTF] Remove Functional.h inclusions
- a/Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h +2 lines
Lines 71-76 public: a/Source/WebCore/Modules/webdatabase/AbstractDatabaseServer.h_sec1
71
    virtual bool deleteOrigin(SecurityOrigin*) = 0;
71
    virtual bool deleteOrigin(SecurityOrigin*) = 0;
72
    virtual bool deleteDatabase(SecurityOrigin*, const String& name) = 0;
72
    virtual bool deleteDatabase(SecurityOrigin*, const String& name) = 0;
73
73
74
    virtual void setPauseAllDatabases(bool) = 0;
75
74
    virtual void interruptAllDatabasesForContext(const DatabaseContext*) = 0;
76
    virtual void interruptAllDatabasesForContext(const DatabaseContext*) = 0;
75
77
76
protected:
78
protected:
- a/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp +5 lines
Lines 397-402 bool DatabaseManager::deleteDatabase(SecurityOrigin* origin, const String& name) a/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp_sec1
397
    return m_server->deleteDatabase(origin, name);
397
    return m_server->deleteDatabase(origin, name);
398
}
398
}
399
399
400
void DatabaseManager::setPauseAllDatabases(bool pauseAllDatabases)
401
{
402
    m_server->setPauseAllDatabases(pauseAllDatabases);
403
}
404
400
void DatabaseManager::interruptAllDatabasesForContext(ScriptExecutionContext* context)
405
void DatabaseManager::interruptAllDatabasesForContext(ScriptExecutionContext* context)
401
{
406
{
402
    RefPtr<DatabaseContext> databaseContext = existingDatabaseContextFor(context);
407
    RefPtr<DatabaseContext> databaseContext = existingDatabaseContextFor(context);
- a/Source/WebCore/Modules/webdatabase/DatabaseManager.h +2 lines
Lines 103-108 public: a/Source/WebCore/Modules/webdatabase/DatabaseManager.h_sec1
103
    WEBCORE_EXPORT bool deleteOrigin(SecurityOrigin*);
103
    WEBCORE_EXPORT bool deleteOrigin(SecurityOrigin*);
104
    WEBCORE_EXPORT bool deleteDatabase(SecurityOrigin*, const String& name);
104
    WEBCORE_EXPORT bool deleteDatabase(SecurityOrigin*, const String& name);
105
105
106
    WEBCORE_EXPORT void setPauseAllDatabases(bool);
107
106
    void interruptAllDatabasesForContext(ScriptExecutionContext*);
108
    void interruptAllDatabasesForContext(ScriptExecutionContext*);
107
109
108
private:
110
private:
- a/Source/WebCore/Modules/webdatabase/DatabaseServer.cpp +7 lines
Lines 108-113 bool DatabaseServer::deleteDatabase(SecurityOrigin* origin, const String& name) a/Source/WebCore/Modules/webdatabase/DatabaseServer.cpp_sec1
108
    return DatabaseTracker::tracker().deleteDatabase(origin, name);
108
    return DatabaseTracker::tracker().deleteDatabase(origin, name);
109
}
109
}
110
110
111
void DatabaseServer::setPauseAllDatabases(bool pauseAllDatabases)
112
{
113
#if PLATFORM(IOS)
114
    DatabaseTracker::tracker().setDatabasesPaused(pauseAllDatabases);
115
#endif
116
}
117
111
void DatabaseServer::interruptAllDatabasesForContext(const DatabaseContext* context)
118
void DatabaseServer::interruptAllDatabasesForContext(const DatabaseContext* context)
112
{
119
{
113
    DatabaseTracker::tracker().interruptAllDatabasesForContext(context);
120
    DatabaseTracker::tracker().interruptAllDatabasesForContext(context);
- a/Source/WebCore/Modules/webdatabase/DatabaseServer.h +2 lines
Lines 60-65 public: a/Source/WebCore/Modules/webdatabase/DatabaseServer.h_sec1
60
    virtual bool deleteOrigin(SecurityOrigin*);
60
    virtual bool deleteOrigin(SecurityOrigin*);
61
    virtual bool deleteDatabase(SecurityOrigin*, const String& name);
61
    virtual bool deleteDatabase(SecurityOrigin*, const String& name);
62
62
63
    virtual void setPauseAllDatabases(bool) override;
64
63
    virtual void interruptAllDatabasesForContext(const DatabaseContext*);
65
    virtual void interruptAllDatabasesForContext(const DatabaseContext*);
64
66
65
protected:
67
protected:
- a/Source/WebKit2/UIProcess/WebPageProxy.h +3 lines
Lines 493-501 public: a/Source/WebKit2/UIProcess/WebPageProxy.h_sec1
493
    void setAssistedNodeValue(const String&);
493
    void setAssistedNodeValue(const String&);
494
    void setAssistedNodeValueAsNumber(double);
494
    void setAssistedNodeValueAsNumber(double);
495
    void setAssistedNodeSelectedIndex(uint32_t index, bool allowMultipleSelection = false);
495
    void setAssistedNodeSelectedIndex(uint32_t index, bool allowMultipleSelection = false);
496
496
    void applicationWillEnterForeground();
497
    void applicationWillEnterForeground();
498
    void applicationDidEnterBackground();
497
    void applicationWillResignActive();
499
    void applicationWillResignActive();
498
    void applicationDidBecomeActive();
500
    void applicationDidBecomeActive();
501
499
    void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale);
502
    void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale);
500
    void commitPotentialTapFailed();
503
    void commitPotentialTapFailed();
501
    void didNotHandleTapAsClick(const WebCore::IntPoint&);
504
    void didNotHandleTapAsClick(const WebCore::IntPoint&);
- a/Source/WebKit2/UIProcess/ios/WKContentView.mm +1 lines
Lines 551-556 - (void)_applicationWillResignActive:(NSNotification*)notification a/Source/WebKit2/UIProcess/ios/WKContentView.mm_sec1
551
- (void)_applicationDidEnterBackground:(NSNotification*)notification
551
- (void)_applicationDidEnterBackground:(NSNotification*)notification
552
{
552
{
553
    _isBackground = YES;
553
    _isBackground = YES;
554
    _page->applicationDidEnterBackground();
554
    _page->viewStateDidChange(ViewState::AllFlags & ~ViewState::IsInWindow);
555
    _page->viewStateDidChange(ViewState::AllFlags & ~ViewState::IsInWindow);
555
}
556
}
556
557
- a/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm +5 lines
Lines 598-603 void WebPageProxy::applicationWillEnterForeground() a/Source/WebKit2/UIProcess/ios/WebPageProxyIOS.mm_sec1
598
    m_process->send(Messages::WebPage::ApplicationWillEnterForeground(), m_pageID);
598
    m_process->send(Messages::WebPage::ApplicationWillEnterForeground(), m_pageID);
599
}
599
}
600
600
601
void WebPageProxy::applicationDidEnterBackground()
602
{
603
    m_process->send(Messages::WebPage::ApplicationDidEnterBackground(), m_pageID);
604
}
605
601
void WebPageProxy::applicationWillResignActive()
606
void WebPageProxy::applicationWillResignActive()
602
{
607
{
603
    m_process->send(Messages::WebPage::ApplicationWillResignActive(), m_pageID);
608
    m_process->send(Messages::WebPage::ApplicationWillResignActive(), m_pageID);
- a/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp +5 lines
Lines 137-142 void WebDatabaseManager::deleteAllDatabases() const a/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.cpp_sec1
137
    DatabaseManager::singleton().deleteAllDatabases();
137
    DatabaseManager::singleton().deleteAllDatabases();
138
}
138
}
139
139
140
void WebDatabaseManager::setPauseAllDatabases(bool pauseAllDatabases)
141
{
142
    DatabaseManager::singleton().setPauseAllDatabases(pauseAllDatabases);
143
}
144
140
void WebDatabaseManager::setQuotaForOrigin(const String& originIdentifier, unsigned long long quota) const
145
void WebDatabaseManager::setQuotaForOrigin(const String& originIdentifier, unsigned long long quota) const
141
{
146
{
142
    // If the quota is set to a value lower than the current usage, that quota will
147
    // If the quota is set to a value lower than the current usage, that quota will
- a/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h +2 lines
Lines 46-51 public: a/Source/WebKit2/WebProcess/WebCoreSupport/WebDatabaseManager.h_sec1
46
    void setQuotaForOrigin(const String& originIdentifier, unsigned long long quota) const;
46
    void setQuotaForOrigin(const String& originIdentifier, unsigned long long quota) const;
47
    void deleteAllDatabases() const;
47
    void deleteAllDatabases() const;
48
48
49
    void setPauseAllDatabases(bool = true);
50
49
private:
51
private:
50
    // WebProcessSupplement
52
    // WebProcessSupplement
51
    virtual void initialize(const WebProcessCreationParameters&) override;
53
    virtual void initialize(const WebProcessCreationParameters&) override;
- a/Source/WebKit2/WebProcess/WebPage/WebPage.h +3 lines
Lines 783-791 public: a/Source/WebKit2/WebProcess/WebPage/WebPage.h_sec1
783
    void updateVisibleContentRects(const VisibleContentRectUpdateInfo&, double oldestTimestamp);
783
    void updateVisibleContentRects(const VisibleContentRectUpdateInfo&, double oldestTimestamp);
784
    bool scaleWasSetByUIProcess() const { return m_scaleWasSetByUIProcess; }
784
    bool scaleWasSetByUIProcess() const { return m_scaleWasSetByUIProcess; }
785
    void willStartUserTriggeredZooming();
785
    void willStartUserTriggeredZooming();
786
786
    void applicationWillResignActive();
787
    void applicationWillResignActive();
787
    void applicationWillEnterForeground();
788
    void applicationWillEnterForeground();
789
    void applicationDidEnterBackground();
788
    void applicationDidBecomeActive();
790
    void applicationDidBecomeActive();
791
789
    void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale);
792
    void zoomToRect(WebCore::FloatRect, double minimumScale, double maximumScale);
790
    void completePendingSyntheticClickForContentChangeObserver();
793
    void completePendingSyntheticClickForContentChangeObserver();
791
#endif
794
#endif
- a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in +3 lines
Lines 87-95 messages -> WebPage LegacyReceiver { a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in_sec1
87
    SetAssistedNodeValue(String value)
87
    SetAssistedNodeValue(String value)
88
    SetAssistedNodeValueAsNumber(double value)
88
    SetAssistedNodeValueAsNumber(double value)
89
    SetAssistedNodeSelectedIndex(uint32_t index, bool allowMultipleSelection)
89
    SetAssistedNodeSelectedIndex(uint32_t index, bool allowMultipleSelection)
90
90
    ApplicationWillResignActive()
91
    ApplicationWillResignActive()
91
    ApplicationWillEnterForeground()
92
    ApplicationWillEnterForeground()
93
    ApplicationDidEnterBackground()
92
    ApplicationDidBecomeActive()
94
    ApplicationDidBecomeActive()
95
93
    ContentSizeCategoryDidChange(String contentSizeCategory)
96
    ContentSizeCategoryDidChange(String contentSizeCategory)
94
    ExecuteEditCommandWithCallback(String name, uint64_t callbackID)
97
    ExecuteEditCommandWithCallback(String name, uint64_t callbackID)
95
    GetLookupContextAtPoint(WebCore::IntPoint point, uint64_t callbackID)
98
    GetLookupContextAtPoint(WebCore::IntPoint point, uint64_t callbackID)
- a/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm +7 lines
Lines 42-47 a/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm_sec1
42
#import "WKAccessibilityWebPageObjectIOS.h"
42
#import "WKAccessibilityWebPageObjectIOS.h"
43
#import "WebChromeClient.h"
43
#import "WebChromeClient.h"
44
#import "WebCoreArgumentCoders.h"
44
#import "WebCoreArgumentCoders.h"
45
#import "WebDatabaseManager.h"
45
#import "WebFrame.h"
46
#import "WebFrame.h"
46
#import "WebImage.h"
47
#import "WebImage.h"
47
#import "WebKitSystemInterface.h"
48
#import "WebKitSystemInterface.h"
Lines 2717-2725 void WebPage::applicationWillResignActive() a/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm_sec2
2717
2718
2718
void WebPage::applicationWillEnterForeground()
2719
void WebPage::applicationWillEnterForeground()
2719
{
2720
{
2721
    WebProcess::singleton().supplement<WebDatabaseManager>()->setPauseAllDatabases(false);
2720
    [[NSNotificationCenter defaultCenter] postNotificationName:WebUIApplicationWillEnterForegroundNotification object:nil];
2722
    [[NSNotificationCenter defaultCenter] postNotificationName:WebUIApplicationWillEnterForegroundNotification object:nil];
2721
}
2723
}
2722
2724
2725
void WebPage::applicationDidEnterBackground()
2726
{
2727
    WebProcess::singleton().supplement<WebDatabaseManager>()->setPauseAllDatabases();
2728
}
2729
2723
void WebPage::applicationDidBecomeActive()
2730
void WebPage::applicationDidBecomeActive()
2724
{
2731
{
2725
    [[NSNotificationCenter defaultCenter] postNotificationName:WebUIApplicationDidBecomeActiveNotification object:nil];
2732
    [[NSNotificationCenter defaultCenter] postNotificationName:WebUIApplicationDidBecomeActiveNotification object:nil];

Return to Bug 144657