Changeset 159740 in webkit


Ignore:
Timestamp:
Nov 24, 2013 7:09:03 PM (10 years ago)
Author:
weinig@apple.com
Message:

WebPageGroup's should keep track of what processes they are being used by
https://bugs.webkit.org/show_bug.cgi?id=124556

Reviewed by Dan Bernstein.

  • Scripts/webkit2/messages.py:

(struct_or_class):
Mark WebPageGroupData as a struct.

  • Shared/UserMessageCoders.h:
  • Shared/mac/ObjCObjectGraphCoders.h:
  • Shared/mac/ObjCObjectGraphCoders.mm:
  • WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
  • UIProcess/WebConnectionToWebProcess.cpp:
  • UIProcess/WebContext.cpp:
  • UIProcess/WebContextUserMessageCoders.h:
  • UIProcess/WebPageProxy.cpp:
  • UIProcess/WebPageProxy.h:

Pass the WebProcess/WebProcessProxy to both encode and decode.

  • Shared/WebPageCreationParameters.h:

Pass the page group by ID when creating a page, as it will have had its own
creation message sent already.

  • UIProcess/WebPageGroup.cpp:
  • UIProcess/WebPageGroup.h:

Keep track of processes.

  • UIProcess/WebProcessProxy.cpp:
  • UIProcess/WebProcessProxy.h:

Keep track of the page groups used by the process.

  • WebProcess/WebPage/WebPage.cpp:

Get the already create page group on creation.

  • WebProcess/WebProcess.cpp:
  • WebProcess/WebProcess.h:
  • WebProcess/WebProcess.messages.in:

Explicitly create page groups in the WebProcess.

Location:
trunk/Source/WebKit2
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r159737 r159740  
     12013-11-22  Sam Weinig  <sam@webkit.org>
     2
     3        WebPageGroup's should keep track of what processes they are being used by
     4        https://bugs.webkit.org/show_bug.cgi?id=124556
     5
     6        Reviewed by Dan Bernstein.
     7
     8        * Scripts/webkit2/messages.py:
     9        (struct_or_class):
     10        Mark WebPageGroupData as a struct.
     11
     12        * Shared/UserMessageCoders.h:
     13        * Shared/mac/ObjCObjectGraphCoders.h:
     14        * Shared/mac/ObjCObjectGraphCoders.mm:
     15        * WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h:
     16        * UIProcess/WebConnectionToWebProcess.cpp:
     17        * UIProcess/WebContext.cpp:
     18        * UIProcess/WebContextUserMessageCoders.h:
     19        * UIProcess/WebPageProxy.cpp:
     20        * UIProcess/WebPageProxy.h:
     21        Pass the WebProcess/WebProcessProxy to both encode and decode.
     22
     23        * Shared/WebPageCreationParameters.h:
     24        Pass the page group by ID when creating a page, as it will have had its own
     25        creation message sent already.
     26
     27        * UIProcess/WebPageGroup.cpp:
     28        * UIProcess/WebPageGroup.h:
     29        Keep track of processes.
     30
     31        * UIProcess/WebProcessProxy.cpp:
     32        * UIProcess/WebProcessProxy.h:
     33        Keep track of the page groups used by the process.
     34
     35        * WebProcess/WebPage/WebPage.cpp:
     36        Get the already create page group on creation.
     37
     38        * WebProcess/WebProcess.cpp:
     39        * WebProcess/WebProcess.h:
     40        * WebProcess/WebProcess.messages.in:
     41        Explicitly create page groups in the WebProcess.
     42
    1432013-11-24  Brady Eidson  <beidson@apple.com>
    244
  • trunk/Source/WebKit2/Scripts/webkit2/messages.py

    r159728 r159740  
    217217        'WebKit::WebNavigationDataStore',
    218218        'WebKit::WebPageCreationParameters',
     219        'WebKit::WebPageGroupData',
    219220        'WebKit::WebPreferencesStore',
    220221        'WebKit::WebProcessCreationParameters',
  • trunk/Source/WebKit2/Shared/UserMessageCoders.h

    r159647 r159740  
    7272class UserMessageEncoder {
    7373public:
    74     bool baseEncode(CoreIPC::ArgumentEncoder& encoder, API::Object::Type& type) const
     74    bool baseEncode(CoreIPC::ArgumentEncoder& encoder, const Owner& coder, API::Object::Type& type) const
    7575    {
    7676        if (!m_root) {
     
    8787            encoder << static_cast<uint64_t>(array->size());
    8888            for (size_t i = 0; i < array->size(); ++i)
    89                 encoder << Owner(array->at(i));
     89                encoder << Owner(coder, array->at(i));
    9090            return true;
    9191        }
     
    9999            for (; it != end; ++it) {
    100100                encoder << it->key;
    101                 encoder << Owner(it->value.get());
     101                encoder << Owner(coder, it->value.get());
    102102            }
    103103            return true;
     
    150150        case API::Object::Type::RenderLayer: {
    151151            WebRenderLayer* renderLayer = static_cast<WebRenderLayer*>(m_root);
    152             encoder << Owner(renderLayer->renderer());
     152            encoder << Owner(coder, renderLayer->renderer());
    153153            encoder << renderLayer->isReflection();
    154154            encoder << renderLayer->isClipping();
     
    156156            encoder << static_cast<uint32_t>(renderLayer->compositingLayerType());
    157157            encoder << renderLayer->absoluteBoundingBox();
    158             encoder << Owner(renderLayer->negativeZOrderList());
    159             encoder << Owner(renderLayer->normalFlowList());
    160             encoder << Owner(renderLayer->positiveZOrderList());
     158            encoder << Owner(coder, renderLayer->negativeZOrderList());
     159            encoder << Owner(coder, renderLayer->normalFlowList());
     160            encoder << Owner(coder, renderLayer->positiveZOrderList());
    161161            return true;
    162162        }
     
    166166            encoder << renderObject->elementTagName();
    167167            encoder << renderObject->elementID();
    168             encoder << Owner(renderObject->elementClassNames());
     168            encoder << Owner(coder, renderObject->elementClassNames());
    169169            encoder << renderObject->absolutePosition();
    170170            encoder << renderObject->frameRect();
    171             encoder << Owner(renderObject->children());
     171            encoder << Owner(coder, renderObject->children());
    172172            return true;
    173173        }
  • trunk/Source/WebKit2/Shared/WebPageCreationParameters.cpp

    r159631 r159740  
    3838    encoder << store;
    3939    encoder.encodeEnum(drawingAreaType);
    40     encoder << pageGroupData;
     40    encoder << pageGroupID;
    4141    encoder << drawsBackground;
    4242    encoder << drawsTransparentBackground;
     
    7777    if (!decoder.decodeEnum(parameters.drawingAreaType))
    7878        return false;
    79     if (!decoder.decode(parameters.pageGroupData))
     79    if (!decoder.decode(parameters.pageGroupID))
    8080        return false;
    8181    if (!decoder.decode(parameters.drawsBackground))
  • trunk/Source/WebKit2/Shared/WebPageCreationParameters.h

    r159631 r159740  
    6161    WebPreferencesStore store;
    6262    DrawingAreaType drawingAreaType;
    63     WebPageGroupData pageGroupData;
     63    uint64_t pageGroupID;
    6464
    6565    bool drawsBackground;
  • trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.h

    r159631 r159740  
    3939class WebContextObjCObjectGraphEncoder {
    4040public:
    41     explicit WebContextObjCObjectGraphEncoder(ObjCObjectGraph*);
     41    explicit WebContextObjCObjectGraphEncoder(ObjCObjectGraph*, WebProcessProxy*);
    4242    void encode(CoreIPC::ArgumentEncoder&) const;
    4343
    4444private:
    4545    ObjCObjectGraph* m_objectGraph;
     46    WebProcessProxy* m_process;
    4647};
    4748
  • trunk/Source/WebKit2/Shared/mac/ObjCObjectGraphCoders.mm

    r159631 r159740  
    9393class ObjCObjectGraphEncoder {
    9494public:
    95     bool baseEncode(CoreIPC::ArgumentEncoder& encoder, WebKitNSType& type) const
     95    bool baseEncode(CoreIPC::ArgumentEncoder& encoder, const Owner& coder, WebKitNSType& type) const
    9696    {
    9797        if (!m_root) {
     
    119119
    120120            for (NSUInteger i = 0; i < size; ++i)
    121                 encoder << Owner([array objectAtIndex:i]);
     121                encoder << Owner(coder, [array objectAtIndex:i]);
    122122            return true;
    123123        }
     
    131131            NSArray *values = [dictionary allValues];
    132132            for (NSUInteger i = 0; i < size; ++i) {
    133                 encoder << Owner([keys objectAtIndex:i]);
    134                 encoder << Owner([values objectAtIndex:i]);
     133                encoder << Owner(coder, [keys objectAtIndex:i]);
     134                encoder << Owner(coder, [values objectAtIndex:i]);
    135135            }
    136136
     
    270270    typedef ObjCObjectGraphEncoder<WebContextObjCObjectGraphEncoderImpl> Base;
    271271
    272     explicit WebContextObjCObjectGraphEncoderImpl(id root)
    273         : Base(root)
     272    explicit WebContextObjCObjectGraphEncoderImpl(id root, WebProcessProxy* process)
     273        : Base(root)
     274        , m_process(process)
     275    {
     276    }
     277
     278    WebContextObjCObjectGraphEncoderImpl(const WebContextObjCObjectGraphEncoderImpl& userMessageEncoder, id root)
     279        : Base(root)
     280        , m_process(userMessageEncoder.m_process)
    274281    {
    275282    }
     
    278285    {
    279286        WebKitNSType type = NullType;
    280         if (baseEncode(encoder, type))
     287        if (baseEncode(encoder, *this, type))
    281288            return;
    282289
     
    291298        case WKTypeRefWrapperType: {
    292299            WKTypeRefWrapper *wrapper = static_cast<WKTypeRefWrapper *>(m_root);
    293             encoder << WebContextUserMessageEncoder(toImpl(wrapper.object));
     300            encoder << WebContextUserMessageEncoder(toImpl(wrapper.object), m_process);
    294301            break;
    295302        }
     
    300307        }
    301308    }
     309
     310private:
     311    WebProcessProxy* m_process;
    302312};
    303313
     
    379389    }
    380390
     391    explicit InjectedBundleObjCObjectGraphEncoderImpl(const InjectedBundleObjCObjectGraphEncoderImpl&, id root)
     392        : Base(root)
     393    {
     394    }
     395
    381396    void encode(CoreIPC::ArgumentEncoder& encoder) const
    382397    {
    383398        WebKitNSType type = NullType;
    384         if (baseEncode(encoder, type))
     399        if (baseEncode(encoder, *this, type))
    385400            return;
    386401
     
    472487// Adaptors
    473488
    474 WebContextObjCObjectGraphEncoder::WebContextObjCObjectGraphEncoder(ObjCObjectGraph* objectGraph)
     489WebContextObjCObjectGraphEncoder::WebContextObjCObjectGraphEncoder(ObjCObjectGraph* objectGraph, WebProcessProxy* process)
    475490    : m_objectGraph(objectGraph)
     491    , m_process(process)
    476492{
    477493}
     
    479495void WebContextObjCObjectGraphEncoder::encode(CoreIPC::ArgumentEncoder& encoder) const
    480496{
    481     encoder << WebContextObjCObjectGraphEncoderImpl(m_objectGraph->rootObject());
     497    encoder << WebContextObjCObjectGraphEncoderImpl(m_objectGraph->rootObject(), m_process);
    482498}
    483499
  • trunk/Source/WebKit2/UIProcess/WebConnectionToWebProcess.cpp

    r159631 r159740  
    5353void WebConnectionToWebProcess::encodeMessageBody(CoreIPC::ArgumentEncoder& encoder, API::Object* messageBody)
    5454{
    55     encoder << WebContextUserMessageEncoder(messageBody);
     55    encoder << WebContextUserMessageEncoder(messageBody, m_process);
    5656}
    5757
  • trunk/Source/WebKit2/UIProcess/WebContext.cpp

    r159728 r159740  
    595595    if (!injectedBundleInitializationUserData)
    596596        injectedBundleInitializationUserData = m_injectedBundleInitializationUserData;
    597     process->send(Messages::WebProcess::InitializeWebProcess(parameters, WebContextUserMessageEncoder(injectedBundleInitializationUserData.get())), 0);
     597    process->send(Messages::WebProcess::InitializeWebProcess(parameters, WebContextUserMessageEncoder(injectedBundleInitializationUserData.get(), process.get())), 0);
    598598
    599599    if (WebPreferences::anyPageGroupsAreUsingPrivateBrowsing())
     
    609609
    610610            messageData.encode(message.first);
    611             messageData.encode(WebContextUserMessageEncoder(message.second.get()));
     611            messageData.encode(WebContextUserMessageEncoder(message.second.get(), process.get()));
    612612            process->send(Messages::WebProcess::PostInjectedBundleMessage(CoreIPC::DataReference(messageData.buffer(), messageData.bufferSize())), 0);
    613613        }
     
    760760        pageGroup = m_defaultPageGroup.get();
    761761
    762     return process->createWebPage(pageClient, this, pageGroup);
     762    return process->createWebPage(pageClient, *pageGroup);
    763763}
    764764
     
    790790    // FIXME: Return early if the message body contains any references to WKPageRefs/WKFrameRefs etc. since they're local to a process.
    791791
    792     CoreIPC::ArgumentEncoder messageData;
    793     messageData.encode(messageName);
    794     messageData.encode(WebContextUserMessageEncoder(messageBody));
    795 
    796     for (size_t i = 0; i < m_processes.size(); ++i)
     792    for (size_t i = 0; i < m_processes.size(); ++i) {
     793        CoreIPC::ArgumentEncoder messageData;
     794        messageData.encode(messageName);
     795        messageData.encode(WebContextUserMessageEncoder(messageBody, m_processes[i].get()));
     796
    797797        m_processes[i]->send(Messages::WebProcess::PostInjectedBundleMessage(CoreIPC::DataReference(messageData.buffer(), messageData.bufferSize())), 0);
     798    }
    798799}
    799800
     
    993994        RefPtr<API::Object> returnData;
    994995        didReceiveSynchronousMessageFromInjectedBundle(messageName, messageBody.get(), returnData);
    995         replyEncoder->encode(WebContextUserMessageEncoder(returnData.get()));
     996        replyEncoder->encode(WebContextUserMessageEncoder(returnData.get(), WebProcessProxy::fromConnection(connection)));
    996997        return;
    997998    }
  • trunk/Source/WebKit2/UIProcess/WebContextUserMessageCoders.h

    r159631 r159740  
    4646    typedef UserMessageEncoder<WebContextUserMessageEncoder> Base;
    4747
    48     explicit WebContextUserMessageEncoder(API::Object* root)
     48    explicit WebContextUserMessageEncoder(API::Object* root, WebProcessProxy* process)
    4949        : Base(root)
     50        , m_process(process)
     51    {
     52    }
     53
     54    WebContextUserMessageEncoder(const WebContextUserMessageEncoder& userMessageEncoder, API::Object* root)
     55        : Base(root)
     56        , m_process(userMessageEncoder.m_process)
    5057    {
    5158    }
     
    5461    {
    5562        API::Object::Type type = API::Object::Type::Null;
    56         if (baseEncode(encoder, type))
     63        if (baseEncode(encoder, *this, type))
    5764            return;
    5865
     
    7077        case API::Object::Type::PageGroup: {
    7178            WebPageGroup* pageGroup = static_cast<WebPageGroup*>(m_root);
    72             encoder << pageGroup->data();
     79            if (pageGroup->addProcess(*m_process)) {
     80                m_process->addWebPageGroup(*pageGroup);
     81           
     82                encoder << true;
     83                encoder << pageGroup->data();
     84            } else {
     85                encoder << false;
     86                encoder << pageGroup->pageGroupID();
     87            }
    7388            break;
    7489        }
     
    7691        case API::Object::Type::ObjCObjectGraph: {
    7792            ObjCObjectGraph* objectGraph = static_cast<ObjCObjectGraph*>(m_root);
    78             encoder << WebContextObjCObjectGraphEncoder(objectGraph);
     93            encoder << WebContextObjCObjectGraphEncoder(objectGraph, m_process);
    7994            break;
    8095        }
     
    85100        }
    86101    }
     102
     103private:
     104    WebProcessProxy* m_process;
    87105};
    88106
     
    136154            if (!decoder.decode(pageGroupID))
    137155                return false;
    138             coder.m_root = WebPageGroup::get(pageGroupID);
     156            coder.m_root = coder.m_process->webPageGroup(pageGroupID);
    139157            break;
    140158        }
  • trunk/Source/WebKit2/UIProcess/WebPageGroup.cpp

    r159631 r159740  
    3131#include "WebPageProxy.h"
    3232#include "WebPreferences.h"
     33#include "WebProcessMessages.h"
    3334#include <wtf/HashMap.h>
    3435#include <wtf/text/StringConcatenate.h>
     
    192193}
    193194
     195bool WebPageGroup::addProcess(WebProcessProxy& process)
     196{
     197    return m_processes.add(&process).isNewEntry;
     198}
     199
     200void WebPageGroup::disconnectProcess(WebProcessProxy& process)
     201{
     202    m_processes.remove(&process);
     203}
     204
    194205} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/WebPageGroup.h

    r159631 r159740  
    3636namespace WebKit {
    3737
     38class WebPageProxy;
    3839class WebPreferences;
    39 class WebPageProxy;
    4040
    4141class WebPageGroup : public API::TypedObject<API::Object::Type::PageGroup> {
     
    5757    WebPreferences* preferences() const;
    5858    void preferencesDidChange();
    59    
     59
    6060    void addUserStyleSheet(const String& source, const String& baseURL, API::Array* whitelist, API::Array* blacklist, WebCore::UserContentInjectedFrames, WebCore::UserStyleLevel);
    6161    void addUserScript(const String& source, const String& baseURL, API::Array* whitelist, API::Array* blacklist, WebCore::UserContentInjectedFrames, WebCore::UserScriptInjectionTime);
     
    6363    void removeAllUserScripts();
    6464    void removeAllUserContent();
     65
     66    bool addProcess(WebProcessProxy&);
     67    void disconnectProcess(WebProcessProxy&);
    6568
    6669private:
     
    7275    mutable RefPtr<WebPreferences> m_preferences;
    7376    HashSet<WebPageProxy*> m_pages;
     77    HashSet<WebProcessProxy*> m_processes;
    7478};
    7579   
     
    7781void WebPageGroup::sendToAllProcessesInGroup(const T& message, uint64_t destinationID)
    7882{
    79     HashSet<WebProcessProxy*> processesSeen;
    80 
    81     for (WebPageProxy* webPageProxy : m_pages) {
    82         WebProcessProxy* webProcessProxy = webPageProxy->process();
    83         ASSERT(webProcessProxy);
    84 
    85         if (!processesSeen.add(webProcessProxy).isNewEntry)
    86             continue;
    87 
     83    for (auto webProcessProxy : m_processes) {
    8884        if (webProcessProxy->canSendMessage())
    8985            webProcessProxy->send(T(message), destinationID);
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r159724 r159740  
    223223#endif // !LOG_DISABLED
    224224
    225 PassRefPtr<WebPageProxy> WebPageProxy::create(PageClient* pageClient, PassRefPtr<WebProcessProxy> process, WebPageGroup* pageGroup, uint64_t pageID)
     225PassRefPtr<WebPageProxy> WebPageProxy::create(PageClient* pageClient, PassRefPtr<WebProcessProxy> process, WebPageGroup& pageGroup, uint64_t pageID)
    226226{
    227227    return adoptRef(new WebPageProxy(pageClient, process, pageGroup, pageID));
    228228}
    229229
    230 WebPageProxy::WebPageProxy(PageClient* pageClient, PassRefPtr<WebProcessProxy> process, WebPageGroup* pageGroup, uint64_t pageID)
     230WebPageProxy::WebPageProxy(PageClient* pageClient, PassRefPtr<WebProcessProxy> process, WebPageGroup& pageGroup, uint64_t pageID)
    231231    : m_pageClient(pageClient)
    232232    , m_process(process)
    233     , m_pageGroup(pageGroup)
     233    , m_pageGroup(&pageGroup)
    234234    , m_mainFrame(0)
    235235    , m_userAgent(standardUserAgent())
     
    525525#endif
    526526
     527    if (m_pageGroup->addProcess(*m_process)) {
     528        m_process->addWebPageGroup(*m_pageGroup);
     529        m_process->send(Messages::WebProcess::CreateWebPageGroup(m_pageGroup->pageGroupID(), m_pageGroup->data()), 0);
     530    }
     531
    527532    initializeCreationParameters();
    528533    m_process->send(Messages::WebProcess::CreateWebPage(m_pageID, m_creationParameters), 0);
     
    613618    if (createdExtension)
    614619        m_process->willAcquireUniversalFileReadSandboxExtension();
    615     m_process->send(Messages::WebPage::LoadURL(url, sandboxExtensionHandle, WebContextUserMessageEncoder(userData)), m_pageID);
     620    m_process->send(Messages::WebPage::LoadURL(url, sandboxExtensionHandle, WebContextUserMessageEncoder(userData, m_process.get())), m_pageID);
    616621    m_process->responsivenessTimer()->start();
    617622}
     
    628633    if (createdExtension)
    629634        m_process->willAcquireUniversalFileReadSandboxExtension();
    630     m_process->send(Messages::WebPage::LoadURLRequest(urlRequest->resourceRequest(), sandboxExtensionHandle, WebContextUserMessageEncoder(userData)), m_pageID);
     635    m_process->send(Messages::WebPage::LoadURLRequest(urlRequest->resourceRequest(), sandboxExtensionHandle, WebContextUserMessageEncoder(userData, m_process.get())), m_pageID);
    631636    m_process->responsivenessTimer()->start();
    632637}
     
    655660    SandboxExtension::createHandle(resourceDirectoryPath, SandboxExtension::ReadOnly, sandboxExtensionHandle);
    656661    m_process->assumeReadAccessToBaseURL(resourceDirectoryURL);
    657     m_process->send(Messages::WebPage::LoadURL(fileURL, sandboxExtensionHandle, WebContextUserMessageEncoder(userData)), m_pageID);
     662    m_process->send(Messages::WebPage::LoadURL(fileURL, sandboxExtensionHandle, WebContextUserMessageEncoder(userData, m_process.get())), m_pageID);
    658663    m_process->responsivenessTimer()->start();
    659664}
     
    665670
    666671    m_process->assumeReadAccessToBaseURL(baseURL);
    667     m_process->send(Messages::WebPage::LoadData(data->dataReference(), MIMEType, encoding, baseURL, WebContextUserMessageEncoder(userData)), m_pageID);
     672    m_process->send(Messages::WebPage::LoadData(data->dataReference(), MIMEType, encoding, baseURL, WebContextUserMessageEncoder(userData, m_process.get())), m_pageID);
    668673    m_process->responsivenessTimer()->start();
    669674}
     
    675680
    676681    m_process->assumeReadAccessToBaseURL(baseURL);
    677     m_process->send(Messages::WebPage::LoadHTMLString(htmlString, baseURL, WebContextUserMessageEncoder(userData)), m_pageID);
     682    m_process->send(Messages::WebPage::LoadHTMLString(htmlString, baseURL, WebContextUserMessageEncoder(userData, m_process.get())), m_pageID);
    678683    m_process->responsivenessTimer()->start();
    679684}
     
    690695
    691696    m_process->assumeReadAccessToBaseURL(baseURL);
    692     m_process->send(Messages::WebPage::LoadAlternateHTMLString(htmlString, baseURL, unreachableURL, WebContextUserMessageEncoder(userData)), m_pageID);
     697    m_process->send(Messages::WebPage::LoadAlternateHTMLString(htmlString, baseURL, unreachableURL, WebContextUserMessageEncoder(userData, m_process.get())), m_pageID);
    693698    m_process->responsivenessTimer()->start();
    694699}
     
    699704        reattachToWebProcess();
    700705
    701     m_process->send(Messages::WebPage::LoadPlainTextString(string, WebContextUserMessageEncoder(userData)), m_pageID);
     706    m_process->send(Messages::WebPage::LoadPlainTextString(string, WebContextUserMessageEncoder(userData, m_process.get())), m_pageID);
    702707    m_process->responsivenessTimer()->start();
    703708}
     
    708713        reattachToWebProcess();
    709714
    710     m_process->send(Messages::WebPage::LoadWebArchiveData(webArchiveData->dataReference(), WebContextUserMessageEncoder(userData)), m_pageID);
     715    m_process->send(Messages::WebPage::LoadWebArchiveData(webArchiveData->dataReference(), WebContextUserMessageEncoder(userData, m_process.get())), m_pageID);
    711716    m_process->responsivenessTimer()->start();
    712717}
     
    30543059void WebPageProxy::postMessageToInjectedBundle(const String& messageName, API::Object* messageBody)
    30553060{
    3056     process()->send(Messages::WebPage::PostInjectedBundleMessage(messageName, WebContextUserMessageEncoder(messageBody)), m_pageID);
     3061    process()->send(Messages::WebPage::PostInjectedBundleMessage(messageName, WebContextUserMessageEncoder(messageBody, process())), m_pageID);
    30573062}
    30583063
     
    38163821    m_creationParameters.drawingAreaType = m_drawingArea->type();
    38173822    m_creationParameters.store = m_pageGroup->preferences()->store();
    3818     m_creationParameters.pageGroupData = m_pageGroup->data();
     3823    m_creationParameters.pageGroupID = m_pageGroup->pageGroupID();
    38193824    m_creationParameters.drawsBackground = m_drawsBackground;
    38203825    m_creationParameters.drawsTransparentBackground = m_drawsTransparentBackground;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r159724 r159740  
    323323public:
    324324
    325     static PassRefPtr<WebPageProxy> create(PageClient*, PassRefPtr<WebProcessProxy>, WebPageGroup*, uint64_t pageID);
     325    static PassRefPtr<WebPageProxy> create(PageClient*, PassRefPtr<WebProcessProxy>, WebPageGroup&, uint64_t pageID);
    326326    virtual ~WebPageProxy();
    327327
     
    848848       
    849849private:
    850     WebPageProxy(PageClient*, PassRefPtr<WebProcessProxy>, WebPageGroup*, uint64_t pageID);
     850    WebPageProxy(PageClient*, PassRefPtr<WebProcessProxy>, WebPageGroup&, uint64_t pageID);
    851851    void platformInitialize();
    852852    void initializeCreationParameters();
  • trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp

    r159631 r159740  
    3838#include "WebNavigationDataStore.h"
    3939#include "WebNotificationManagerProxy.h"
     40#include "WebPageGroup.h"
    4041#include "WebPageProxy.h"
    4142#include "WebPluginSiteDataManager.h"
     
    145146    Vector<RefPtr<WebFrameProxy>> frames;
    146147    copyValuesToVector(m_frameMap, frames);
    147 
    148     for (size_t i = 0, size = frames.size(); i < size; ++i)
    149         frames[i]->disconnect();
     148    for (auto frame : frames)
     149        frame->disconnect();
    150150    m_frameMap.clear();
    151151
     
    153153        m_downloadProxyMap->processDidClose();
    154154
     155    Vector<WebPageGroup*> pageGroups;
     156    copyValuesToVector(m_pageGroups, pageGroups);
     157    for (auto pageGroup : pageGroups)
     158        pageGroup->disconnectProcess(*this);
     159    m_pageGroups.clear();
     160
    155161    m_context->disconnectProcess(this);
    156162}
     
    161167}
    162168
    163 PassRefPtr<WebPageProxy> WebProcessProxy::createWebPage(PageClient* pageClient, WebContext*, WebPageGroup* pageGroup)
     169PassRefPtr<WebPageProxy> WebProcessProxy::createWebPage(PageClient* pageClient, WebPageGroup& pageGroup)
    164170{
    165171    uint64_t pageID = generatePageID();
     
    208214    copyValuesToVector(m_pageMap, result);
    209215    return result;
     216}
     217
     218WebPageGroup* WebProcessProxy::webPageGroup(uint64_t pageGroupID)
     219{
     220    if (!HashMap<uint64_t, WebPageGroup*>::isValidKey(pageGroupID))
     221        return nullptr;
     222
     223    return m_pageGroups.get(pageGroupID);
     224}
     225
     226void WebProcessProxy::addWebPageGroup(WebPageGroup& pageGroup)
     227{
     228    m_pageGroups.add(pageGroup.pageGroupID(), &pageGroup);
    210229}
    211230
  • trunk/Source/WebKit2/UIProcess/WebProcessProxy.h

    r159631 r159740  
    7878
    7979    static WebPageProxy* webPage(uint64_t pageID);
    80     PassRefPtr<WebPageProxy> createWebPage(PageClient*, WebContext*, WebPageGroup*);
     80    PassRefPtr<WebPageProxy> createWebPage(PageClient*, WebPageGroup&);
    8181    void addExistingWebPage(WebPageProxy*, uint64_t pageID);
    8282    void removeWebPage(uint64_t pageID);
    8383    Vector<WebPageProxy*> pages() const;
     84
     85    WebPageGroup* webPageGroup(uint64_t pageGroupID);
     86    void addWebPageGroup(WebPageGroup&);
    8487
    8588    WebBackForwardListItem* webBackForwardItem(uint64_t itemID) const;
     
    195198    WebFrameProxyMap m_frameMap;
    196199    WebBackForwardListItemMap m_backForwardListItemMap;
     200    HashMap<uint64_t, WebPageGroup*> m_pageGroups;
    197201
    198202    OwnPtr<DownloadProxyMap> m_downloadProxyMap;
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundleUserMessageCoders.h

    r159631 r159740  
    5454    }
    5555
     56    InjectedBundleUserMessageEncoder(const InjectedBundleUserMessageEncoder&, API::Object* root)
     57        : Base(root)
     58    {
     59    }
     60
    5661    void encode(CoreIPC::ArgumentEncoder& encoder) const
    5762    {
    5863        API::Object::Type type = API::Object::Type::Null;
    59         if (baseEncode(encoder, type))
     64        if (baseEncode(encoder, *this, type))
    6065            return;
    6166
     
    134139        }
    135140        case API::Object::Type::PageGroup: {
    136             WebPageGroupData pageGroupData;
    137             if (!decoder.decode(pageGroupData))
     141            bool isNewPageGroup;
     142            if (!decoder.decode(isNewPageGroup))
    138143                return false;
    139             coder.m_root = WebProcess::shared().webPageGroup(pageGroupData);
     144           
     145            if (isNewPageGroup) {
     146                WebPageGroupData pageGroupData;
     147                if (!decoder.decode(pageGroupData))
     148                    return false;
     149                coder.m_root = WebProcess::shared().createWebPageGroup(pageGroupData.pageGroupID, pageGroupData);
     150            } else {
     151                uint64_t pageGroupID;
     152                if (!decoder.decode(pageGroupID))
     153                    return false;
     154                coder.m_root = WebProcess::shared().webPageGroup(pageGroupID);
     155            }
    140156            break;
    141157        }
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r159734 r159740  
    349349    m_mayStartMediaWhenInWindow = parameters.mayStartMediaWhenInWindow;
    350350
    351     m_pageGroup = WebProcess::shared().webPageGroup(parameters.pageGroupData);
     351    m_pageGroup = WebProcess::shared().webPageGroup(parameters.pageGroupID);
     352    ASSERT(m_pageGroup);
     353
    352354    m_page->setGroupName(m_pageGroup->identifier());
    353355    m_page->setDeviceScaleFactor(parameters.deviceScaleFactor);
  • trunk/Source/WebKit2/WebProcess/WebProcess.cpp

    r159724 r159740  
    705705}
    706706
     707WebPageGroupProxy* WebProcess::createWebPageGroup(uint64_t pageGroupID, const WebPageGroupData& pageGroupData)
     708{
     709    ASSERT(!m_pageGroupMap.contains(pageGroupID));
     710    return m_pageGroupMap.add(pageGroupID, WebPageGroupProxy::create(pageGroupData)).iterator->value.get();
     711}
     712
    707713WebPageGroupProxy* WebProcess::webPageGroup(PageGroup* pageGroup)
    708714{
     
    718724{
    719725    return m_pageGroupMap.get(pageGroupID);
    720 }
    721 
    722 WebPageGroupProxy* WebProcess::webPageGroup(const WebPageGroupData& pageGroupData)
    723 {
    724     HashMap<uint64_t, RefPtr<WebPageGroupProxy>>::AddResult result = m_pageGroupMap.add(pageGroupData.pageGroupID, nullptr);
    725     if (result.isNewEntry) {
    726         ASSERT(!result.iterator->value);
    727         result.iterator->value = WebPageGroupProxy::create(pageGroupData);
    728     }
    729 
    730     return result.iterator->value.get();
    731726}
    732727
  • trunk/Source/WebKit2/WebProcess/WebProcess.h

    r159724 r159740  
    128128    void removeWebFrame(uint64_t);
    129129
     130    WebPageGroupProxy* createWebPageGroup(uint64_t pageGroupID, const WebPageGroupData&);
    130131    WebPageGroupProxy* webPageGroup(WebCore::PageGroup*);
    131132    WebPageGroupProxy* webPageGroup(uint64_t pageGroupID);
    132     WebPageGroupProxy* webPageGroup(const WebPageGroupData&);
    133133
    134134#if PLATFORM(MAC)
  • trunk/Source/WebKit2/WebProcess/WebProcess.messages.in

    r159647 r159740  
    2727    # Create a new page.
    2828    CreateWebPage(uint64_t newPageID, WebKit::WebPageCreationParameters pageCreationParameters)
     29
     30    # Create a new page group.
     31    CreateWebPageGroup(uint64_t newPageGroupID, WebKit::WebPageGroupData pageGroupData)
    2932
    3033    # Visited link tracking.
Note: See TracChangeset for help on using the changeset viewer.