Changeset 163656 in webkit


Ignore:
Timestamp:
Feb 7, 2014 3:26:25 PM (10 years ago)
Author:
andersca@apple.com
Message:

Make it possible for each web page to have different preferences
https://bugs.webkit.org/show_bug.cgi?id=128403

Reviewed by Tim Horton.

  • UIProcess/API/C/WKPreferences.cpp:

(WKPreferencesCreate):

  • UIProcess/WebContext.cpp:

(WebKit::WebContext::ensureNetworkProcess):
(WebKit::WebContext::createNewWebProcess):

  • UIProcess/WebIconDatabase.cpp:

(WebKit::WebIconDatabase::setDatabasePath):

  • UIProcess/WebPageGroup.cpp:

(WebKit::WebPageGroup::WebPageGroup):
(WebKit::WebPageGroup::~WebPageGroup):
(WebKit::WebPageGroup::setPreferences):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::~WebPageProxy):
(WebKit::WebPageProxy::setPreferences):
(WebKit::WebPageProxy::preferencesDidChange):

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPreferences.cpp:

(WebKit::WebPreferences::~WebPreferences):
(WebKit::WebPreferences::addPage):
(WebKit::WebPreferences::removePage):
(WebKit::WebPreferences::update):
(WebKit::WebPreferences::updatePrivateBrowsingValue):
(WebKit::WebPreferences::anyPagesAreUsingPrivateBrowsing):

  • UIProcess/WebPreferences.h:
Location:
trunk/Source/WebKit2
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r163654 r163656  
     12014-02-07  Anders Carlsson  <andersca@apple.com>
     2
     3        Make it possible for each web page to have different preferences
     4        https://bugs.webkit.org/show_bug.cgi?id=128403
     5
     6        Reviewed by Tim Horton.
     7
     8        * UIProcess/API/C/WKPreferences.cpp:
     9        (WKPreferencesCreate):
     10        * UIProcess/WebContext.cpp:
     11        (WebKit::WebContext::ensureNetworkProcess):
     12        (WebKit::WebContext::createNewWebProcess):
     13        * UIProcess/WebIconDatabase.cpp:
     14        (WebKit::WebIconDatabase::setDatabasePath):
     15        * UIProcess/WebPageGroup.cpp:
     16        (WebKit::WebPageGroup::WebPageGroup):
     17        (WebKit::WebPageGroup::~WebPageGroup):
     18        (WebKit::WebPageGroup::setPreferences):
     19        * UIProcess/WebPageProxy.cpp:
     20        (WebKit::WebPageProxy::WebPageProxy):
     21        (WebKit::WebPageProxy::~WebPageProxy):
     22        (WebKit::WebPageProxy::setPreferences):
     23        (WebKit::WebPageProxy::preferencesDidChange):
     24        * UIProcess/WebPageProxy.h:
     25        * UIProcess/WebPreferences.cpp:
     26        (WebKit::WebPreferences::~WebPreferences):
     27        (WebKit::WebPreferences::addPage):
     28        (WebKit::WebPreferences::removePage):
     29        (WebKit::WebPreferences::update):
     30        (WebKit::WebPreferences::updatePrivateBrowsingValue):
     31        (WebKit::WebPreferences::anyPagesAreUsingPrivateBrowsing):
     32        * UIProcess/WebPreferences.h:
     33
    1342014-02-07  Benjamin Poulain  <bpoulain@apple.com>
    235
  • trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp

    r163636 r163656  
    4444WKPreferencesRef WKPreferencesCreate()
    4545{
    46     RefPtr<WebPreferences> preferences = WebPreferences::create();
     46    RefPtr<WebPreferences> preferences = WebPreferences::create(String());
    4747    return toAPI(preferences.release().leakRef());
    4848}
  • trunk/Source/WebKit2/UIProcess/WebContext.cpp

    r163597 r163656  
    378378    NetworkProcessCreationParameters parameters;
    379379
    380     parameters.privateBrowsingEnabled = WebPreferences::anyPageGroupsAreUsingPrivateBrowsing();
     380    parameters.privateBrowsingEnabled = WebPreferences::anyPagesAreUsingPrivateBrowsing();
    381381
    382382    parameters.cacheModel = m_cacheModel;
     
    620620#endif
    621621
    622     if (WebPreferences::anyPageGroupsAreUsingPrivateBrowsing())
     622    if (WebPreferences::anyPagesAreUsingPrivateBrowsing())
    623623        process->send(Messages::WebProcess::EnsurePrivateBrowsingSession(SessionTracker::legacyPrivateSessionID), 0);
    624624
  • trunk/Source/WebKit2/UIProcess/WebIconDatabase.cpp

    r161148 r163656  
    8080    // FIXME: WebIconDatabases are per-WebContext but WebContext's don't have their own notion of the current private browsing setting.
    8181    // As we clean up private browsing throughout the stack we need to clean it up here.
    82     m_iconDatabaseImpl->setPrivateBrowsingEnabled(WebPreferences::anyPageGroupsAreUsingPrivateBrowsing());
     82    m_iconDatabaseImpl->setPrivateBrowsingEnabled(WebPreferences::anyPagesAreUsingPrivateBrowsing());
    8383
    8484    if (!m_iconDatabaseImpl->open(directoryName(path), pathGetFileName(path))) {
  • trunk/Source/WebKit2/UIProcess/WebPageGroup.cpp

    r163644 r163656  
    8787    , m_preferences(WebPreferences::create(m_data.identifer))
    8888{
    89     m_preferences->addPageGroup(this);
    9089    webPageGroupMap().set(m_data.pageGroupID, this);
    9190}
     
    9392WebPageGroup::~WebPageGroup()
    9493{
    95     m_preferences->removePageGroup(this);
    9694    webPageGroupMap().remove(pageGroupID());
    9795}
     
    112110        return;
    113111
    114     m_preferences->removePageGroup(this);
    115112    m_preferences = preferences;
    116     m_preferences->addPageGroup(this);
    117113
    118114    for (auto& webPageProxy : m_pages)
    119115        webPageProxy->setPreferences(*m_preferences);
    120 
    121     preferencesDidChange();
    122116}
    123117
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r163645 r163656  
    350350    WebContext::statistics().wkPageCount++;
    351351
     352    m_preferences->addPage(*this);
    352353    m_pageGroup->addPage(this);
    353354
     
    382383        TextChecker::closeSpellDocumentWithTag(m_spellDocumentTag);
    383384
     385    m_preferences->removePage(*this);
    384386    m_pageGroup->removePage(this);
    385387
     
    404406
    405407    return m_isValid;
     408}
     409
     410void WebPageProxy::setPreferences(WebPreferences& preferences)
     411{
     412    if (&preferences == &m_preferences.get())
     413        return;
     414
     415    m_preferences->removePage(*this);
     416    m_preferences = preferences;
     417    m_preferences->addPage(*this);
     418
     419    preferencesDidChange();
    406420}
    407421
     
    20682082
    20692083#if ENABLE(INSPECTOR_SERVER)
    2070     if (m_pageGroup->preferences().developerExtrasEnabled())
     2084    if (m_preferences->developerExtrasEnabled())
    20712085        inspector()->enableRemoteInspection();
    20722086#endif
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r163645 r163656  
    730730
    731731    WebPreferences& preferences() { return m_preferences.get(); }
    732     void setPreferences(WebPreferences& preferences) { m_preferences = preferences; }
     732    void setPreferences(WebPreferences&);
    733733
    734734    WebPageGroup& pageGroup() { return m_pageGroup.get(); }
  • trunk/Source/WebKit2/UIProcess/WebPreferences.cpp

    r163636 r163656  
    3535// FIXME: Manipulating this variable is not thread safe.
    3636// Instead of tracking private browsing state as a boolean preference, we should let the client provide storage sessions explicitly.
    37 static unsigned privateBrowsingPageGroupCount;
    38 
    39 WebPreferences::WebPreferences()
    40 {
    41     platformInitializeStore();
    42 }
     37static unsigned privateBrowsingPageCount;
    4338
    4439WebPreferences::WebPreferences(const String& identifier)
     
    5651WebPreferences::~WebPreferences()
    5752{
    58     ASSERT(m_pageGroups.isEmpty());
     53    ASSERT(m_pages.isEmpty());
    5954}
    6055
     
    6459}
    6560
    66 void WebPreferences::addPageGroup(WebPageGroup* pageGroup)
     61void WebPreferences::addPage(WebPageProxy& webPageProxy)
    6762{
    68     bool didAddPageGroup = m_pageGroups.add(pageGroup).isNewEntry;
    69     if (didAddPageGroup && privateBrowsingEnabled()) {
    70         if (!privateBrowsingPageGroupCount)
     63    ASSERT(!m_pages.contains(&webPageProxy));
     64    m_pages.add(&webPageProxy);
     65
     66    if (privateBrowsingEnabled()) {
     67        if (!privateBrowsingPageCount)
    7168            WebContext::willStartUsingPrivateBrowsing();
    72         ++privateBrowsingPageGroupCount;
     69
     70        ++privateBrowsingPageCount;
    7371    }
    7472}
    7573
    76 void WebPreferences::removePageGroup(WebPageGroup* pageGroup)
     74void WebPreferences::removePage(WebPageProxy& webPageProxy)
    7775{
    78     bool didRemovePageGroup = m_pageGroups.remove(pageGroup);
    79     if (didRemovePageGroup && privateBrowsingEnabled()) {
    80         --privateBrowsingPageGroupCount;
    81         if (!privateBrowsingPageGroupCount)
     76    ASSERT(m_pages.contains(&webPageProxy));
     77    m_pages.remove(&webPageProxy);
     78
     79    if (privateBrowsingEnabled()) {
     80        --privateBrowsingPageCount;
     81        if (!privateBrowsingPageCount)
    8282            WebContext::willStopUsingPrivateBrowsing();
    8383    }
     
    8686void WebPreferences::update()
    8787{
    88     for (HashSet<WebPageGroup*>::iterator it = m_pageGroups.begin(), end = m_pageGroups.end(); it != end; ++it)
    89         (*it)->preferencesDidChange();
     88    for (auto& webPageProxy : m_pages)
     89        webPageProxy->preferencesDidChange();
    9090}
    9191
     
    129129    platformUpdateBoolValueForKey(WebPreferencesKey::privateBrowsingEnabledKey(), value);
    130130
    131     unsigned pageGroupsChanged = m_pageGroups.size();
    132     if (!pageGroupsChanged)
     131    unsigned pagesChanged = m_pages.size();
     132    if (!pagesChanged)
    133133        return;
    134134
    135135    if (value) {
    136         if (!privateBrowsingPageGroupCount)
     136        if (!privateBrowsingPageCount)
    137137            WebContext::willStartUsingPrivateBrowsing();
    138         privateBrowsingPageGroupCount += pageGroupsChanged;
     138        privateBrowsingPageCount += pagesChanged;
    139139    }
    140140
     
    142142
    143143    if (!value) {
    144         ASSERT(privateBrowsingPageGroupCount >= pageGroupsChanged);
    145         privateBrowsingPageGroupCount -= pageGroupsChanged;
    146         if (!privateBrowsingPageGroupCount)
     144        ASSERT(privateBrowsingPageCount >= pagesChanged);
     145        privateBrowsingPageCount -= pagesChanged;
     146        if (!privateBrowsingPageCount)
    147147            WebContext::willStopUsingPrivateBrowsing();
    148148    }
     
    167167#undef DEFINE_PREFERENCE_GETTER_AND_SETTERS
    168168
    169 bool WebPreferences::anyPageGroupsAreUsingPrivateBrowsing()
     169bool WebPreferences::anyPagesAreUsingPrivateBrowsing()
    170170{
    171     return privateBrowsingPageGroupCount;
     171    return privateBrowsingPageCount;
    172172}
    173173
  • trunk/Source/WebKit2/UIProcess/WebPreferences.h

    r163636 r163656  
    4040namespace WebKit {
    4141
    42 class WebPageGroup;
     42class WebPageProxy;
    4343
    4444class WebPreferences : public API::ObjectImpl<API::Object::Type::Preferences> {
    4545public:
    46     static PassRefPtr<WebPreferences> create()
    47     {
    48         return adoptRef(new WebPreferences);
    49     }
    5046    static PassRefPtr<WebPreferences> create(const String& identifier)
    5147    {
     
    5753    PassRefPtr<WebPreferences> copy() const;
    5854
    59     void addPageGroup(WebPageGroup*);
    60     void removePageGroup(WebPageGroup*);
     55    void addPage(WebPageProxy&);
     56    void removePage(WebPageProxy&);
    6157
    6258    const WebPreferencesStore& store() const { return m_store; }
     
    7369    void forceUpdate() { update(); }
    7470
    75     static bool anyPageGroupsAreUsingPrivateBrowsing();
     71    static bool anyPagesAreUsingPrivateBrowsing();
    7672
    7773private:
    78     WebPreferences();
    7974    explicit WebPreferences(const String&);
    8075    WebPreferences(const WebPreferences&);
     
    9792    void updatePrivateBrowsingValue(bool value);
    9893
    99     HashSet<WebPageGroup*> m_pageGroups;
     94    String m_identifier;
    10095    WebPreferencesStore m_store;
    101     String m_identifier;
     96
     97    HashSet<WebPageProxy*> m_pages;
    10298};
    10399
Note: See TracChangeset for help on using the changeset viewer.