browser(webkit): getLocalStorageData command (#6858)
This commit is contained in:
		
							parent
							
								
									c5e1c8b90c
								
							
						
					
					
						commit
						4fa792ee89
					
				|  | @ -1,2 +1,2 @@ | ||||||
| 1490 | 1491 | ||||||
| Changed: yurys@chromium.org Tue 01 Jun 2021 03:20:32 PM PDT | Changed: yurys@chromium.org Wed 02 Jun 2021 03:34:29 PM PDT | ||||||
|  |  | ||||||
|  | @ -1216,10 +1216,10 @@ index db52479a72d459be23d4d8d080c0ed15ea9fc4c0..5f7add78fefc2bf8718ff8af7c49c169 | ||||||
|  } |  } | ||||||
| diff --git a/Source/JavaScriptCore/inspector/protocol/Playwright.json b/Source/JavaScriptCore/inspector/protocol/Playwright.json
 | diff --git a/Source/JavaScriptCore/inspector/protocol/Playwright.json b/Source/JavaScriptCore/inspector/protocol/Playwright.json
 | ||||||
| new file mode 100644 | new file mode 100644 | ||||||
| index 0000000000000000000000000000000000000000..ce69bc6a10b49460c73110e54b2936afe5dd4ebf
 | index 0000000000000000000000000000000000000000..2946ae9cf1ce56078cbbed524f8345275f2adca1
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/Source/JavaScriptCore/inspector/protocol/Playwright.json
 | +++ b/Source/JavaScriptCore/inspector/protocol/Playwright.json
 | ||||||
| @@ -0,0 +1,244 @@
 | @@ -0,0 +1,273 @@
 | ||||||
| +{
 | +{
 | ||||||
| +    "domain": "Playwright",
 | +    "domain": "Playwright",
 | ||||||
| +    "availability": ["web"],
 | +    "availability": ["web"],
 | ||||||
|  | @ -1273,6 +1273,24 @@ index 0000000000000000000000000000000000000000..ce69bc6a10b49460c73110e54b2936af | ||||||
| +            ]
 | +            ]
 | ||||||
| +        },
 | +        },
 | ||||||
| +        {
 | +        {
 | ||||||
|  | +            "id": "NameValue",
 | ||||||
|  | +            "type": "object",
 | ||||||
|  | +            "description": "Name-value pair",
 | ||||||
|  | +            "properties": [
 | ||||||
|  | +                { "name": "name", "type": "string" },
 | ||||||
|  | +                { "name": "value", "type": "string" }
 | ||||||
|  | +            ]
 | ||||||
|  | +        },
 | ||||||
|  | +        {
 | ||||||
|  | +            "id": "OriginStorage",
 | ||||||
|  | +            "type": "object",
 | ||||||
|  | +            "description": "Origin object",
 | ||||||
|  | +            "properties": [
 | ||||||
|  | +                { "name": "origin", "type": "string", "description": "Origin." },
 | ||||||
|  | +                { "name": "items", "type": "array", "items": { "$ref": "NameValue" }, "description": "Storage entries." }
 | ||||||
|  | +            ]
 | ||||||
|  | +        },
 | ||||||
|  | +        {
 | ||||||
| +            "id": "Geolocation",
 | +            "id": "Geolocation",
 | ||||||
| +            "type": "object",
 | +            "type": "object",
 | ||||||
| +            "description": "Geolocation",
 | +            "description": "Geolocation",
 | ||||||
|  | @ -1375,6 +1393,17 @@ index 0000000000000000000000000000000000000000..ce69bc6a10b49460c73110e54b2936af | ||||||
| +            ]
 | +            ]
 | ||||||
| +        },
 | +        },
 | ||||||
| +        {
 | +        {
 | ||||||
|  | +            "name": "getLocalStorageData",
 | ||||||
|  | +            "description": "Returns all local storage data in the given browser context.",
 | ||||||
|  | +            "async": true,
 | ||||||
|  | +            "parameters": [
 | ||||||
|  | +                { "name": "browserContextId", "$ref": "ContextID", "optional": true, "description": "Browser context id." }
 | ||||||
|  | +            ],
 | ||||||
|  | +            "returns": [
 | ||||||
|  | +                { "name": "origins", "type": "array", "items": { "$ref": "OriginStorage" }, "description": "Local storage data." }
 | ||||||
|  | +            ]
 | ||||||
|  | +        },
 | ||||||
|  | +        {
 | ||||||
| +            "name": "setGeolocationOverride",
 | +            "name": "setGeolocationOverride",
 | ||||||
| +            "parameters": [
 | +            "parameters": [
 | ||||||
| +                { "name": "browserContextId", "$ref": "ContextID", "optional": true, "description": "Browser context id." },
 | +                { "name": "browserContextId", "$ref": "ContextID", "optional": true, "description": "Browser context id." },
 | ||||||
|  | @ -8599,7 +8628,7 @@ index c63a6ba71fae430b9d2a326ecfb86a14ddd31993..739672cfcd5d7d803b5fa32466e66481 | ||||||
|      RemoveStorageAccessForFrame(WebCore::FrameIdentifier frameID, WebCore::PageIdentifier pageID); |      RemoveStorageAccessForFrame(WebCore::FrameIdentifier frameID, WebCore::PageIdentifier pageID); | ||||||
|      LogUserInteraction(WebCore::RegistrableDomain domain) |      LogUserInteraction(WebCore::RegistrableDomain domain) | ||||||
| diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.cpp b/Source/WebKit/NetworkProcess/NetworkProcess.cpp
 | diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.cpp b/Source/WebKit/NetworkProcess/NetworkProcess.cpp
 | ||||||
| index 364c23618b3ce25e0c43b54bf538582adab83192..450d6c435cd14caf0302384a945204ff2b891bdc 100644
 | index 364c23618b3ce25e0c43b54bf538582adab83192..cdf9a6f823865608b10c3e65f13d32f5082f05a8 100644
 | ||||||
| --- a/Source/WebKit/NetworkProcess/NetworkProcess.cpp
 | --- a/Source/WebKit/NetworkProcess/NetworkProcess.cpp
 | ||||||
| +++ b/Source/WebKit/NetworkProcess/NetworkProcess.cpp
 | +++ b/Source/WebKit/NetworkProcess/NetworkProcess.cpp
 | ||||||
| @@ -26,7 +26,6 @@
 | @@ -26,7 +26,6 @@
 | ||||||
|  | @ -8610,7 +8639,7 @@ index 364c23618b3ce25e0c43b54bf538582adab83192..450d6c435cd14caf0302384a945204ff | ||||||
|  #include "ArgumentCoders.h" |  #include "ArgumentCoders.h" | ||||||
|  #include "Attachment.h" |  #include "Attachment.h" | ||||||
|  #include "AuthenticationManager.h" |  #include "AuthenticationManager.h" | ||||||
| @@ -555,6 +554,41 @@ void NetworkProcess::destroySession(PAL::SessionID sessionID)
 | @@ -555,6 +554,50 @@ void NetworkProcess::destroySession(PAL::SessionID sessionID)
 | ||||||
|      m_storageManagerSet->remove(sessionID); |      m_storageManagerSet->remove(sessionID); | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  | @ -8643,6 +8672,15 @@ index 364c23618b3ce25e0c43b54bf538582adab83192..450d6c435cd14caf0302384a945204ff | ||||||
| +    completionHandler(false);
 | +    completionHandler(false);
 | ||||||
| +}
 | +}
 | ||||||
| +
 | +
 | ||||||
|  | +void NetworkProcess::getLocalStorageData(PAL::SessionID sessionID, CompletionHandler<void(Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>>&&)>&& completionHandler)
 | ||||||
|  | +{
 | ||||||
|  | +    if (m_storageManagerSet->contains(sessionID)) {
 | ||||||
|  | +        m_storageManagerSet->getLocalStorageData(sessionID, WTFMove(completionHandler));
 | ||||||
|  | +        return;
 | ||||||
|  | +    }
 | ||||||
|  | +    completionHandler(Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>>());
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
| +void NetworkProcess::setIgnoreCertificateErrors(PAL::SessionID sessionID, bool ignore)
 | +void NetworkProcess::setIgnoreCertificateErrors(PAL::SessionID sessionID, bool ignore)
 | ||||||
| +{
 | +{
 | ||||||
| +    if (auto* networkSession = this->networkSession(sessionID))
 | +    if (auto* networkSession = this->networkSession(sessionID))
 | ||||||
|  | @ -8653,7 +8691,7 @@ index 364c23618b3ce25e0c43b54bf538582adab83192..450d6c435cd14caf0302384a945204ff | ||||||
|  void NetworkProcess::dumpResourceLoadStatistics(PAL::SessionID sessionID, CompletionHandler<void(String)>&& completionHandler) |  void NetworkProcess::dumpResourceLoadStatistics(PAL::SessionID sessionID, CompletionHandler<void(String)>&& completionHandler) | ||||||
|  { |  { | ||||||
| diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.h b/Source/WebKit/NetworkProcess/NetworkProcess.h
 | diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.h b/Source/WebKit/NetworkProcess/NetworkProcess.h
 | ||||||
| index 083382c99a07b26fd58921c5c87e2a61b210761c..0ed80000724204f2fef7dbd3137726c40eaf5a33 100644
 | index 083382c99a07b26fd58921c5c87e2a61b210761c..af15a73973ed9207fa65765982813a975d17194d 100644
 | ||||||
| --- a/Source/WebKit/NetworkProcess/NetworkProcess.h
 | --- a/Source/WebKit/NetworkProcess/NetworkProcess.h
 | ||||||
| +++ b/Source/WebKit/NetworkProcess/NetworkProcess.h
 | +++ b/Source/WebKit/NetworkProcess/NetworkProcess.h
 | ||||||
| @@ -79,6 +79,7 @@ class SessionID;
 | @@ -79,6 +79,7 @@ class SessionID;
 | ||||||
|  | @ -8664,7 +8702,7 @@ index 083382c99a07b26fd58921c5c87e2a61b210761c..0ed80000724204f2fef7dbd3137726c4 | ||||||
|  class CurlProxySettings; |  class CurlProxySettings; | ||||||
|  class ProtectionSpace; |  class ProtectionSpace; | ||||||
|  class StorageQuotaManager; |  class StorageQuotaManager; | ||||||
| @@ -207,6 +208,11 @@ public:
 | @@ -207,6 +208,13 @@ public:
 | ||||||
|   |   | ||||||
|      void addWebsiteDataStore(WebsiteDataStoreParameters&&); |      void addWebsiteDataStore(WebsiteDataStoreParameters&&); | ||||||
|   |   | ||||||
|  | @ -8672,15 +8710,17 @@ index 083382c99a07b26fd58921c5c87e2a61b210761c..0ed80000724204f2fef7dbd3137726c4 | ||||||
| +    void setCookies(PAL::SessionID, Vector<WebCore::Cookie>, CompletionHandler<void(bool)>&&);
 | +    void setCookies(PAL::SessionID, Vector<WebCore::Cookie>, CompletionHandler<void(bool)>&&);
 | ||||||
| +    void deleteAllCookies(PAL::SessionID, CompletionHandler<void(bool)>&&);
 | +    void deleteAllCookies(PAL::SessionID, CompletionHandler<void(bool)>&&);
 | ||||||
| +    void setIgnoreCertificateErrors(PAL::SessionID, bool);
 | +    void setIgnoreCertificateErrors(PAL::SessionID, bool);
 | ||||||
|  | +
 | ||||||
|  | +    void getLocalStorageData(PAL::SessionID sessionID, CompletionHandler<void(Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>>&&)>&&);
 | ||||||
| +
 | +
 | ||||||
|  #if ENABLE(RESOURCE_LOAD_STATISTICS) |  #if ENABLE(RESOURCE_LOAD_STATISTICS) | ||||||
|      void clearPrevalentResource(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void()>&&); |      void clearPrevalentResource(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void()>&&); | ||||||
|      void clearUserInteraction(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void()>&&); |      void clearUserInteraction(PAL::SessionID, const RegistrableDomain&, CompletionHandler<void()>&&); | ||||||
| diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.messages.in b/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
 | diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.messages.in b/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
 | ||||||
| index 40ea12a0d44aeda21492e852479d6a8dc22d83c8..2147d9ef376525346db7cdbe303a0d8fd8fa5174 100644
 | index 40ea12a0d44aeda21492e852479d6a8dc22d83c8..e74c749360b916d61c02816c6960f777ede7ada9 100644
 | ||||||
| --- a/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
 | --- a/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
 | ||||||
| +++ b/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
 | +++ b/Source/WebKit/NetworkProcess/NetworkProcess.messages.in
 | ||||||
| @@ -79,6 +79,11 @@ messages -> NetworkProcess LegacyReceiver {
 | @@ -79,6 +79,13 @@ messages -> NetworkProcess LegacyReceiver {
 | ||||||
|   |   | ||||||
|      PreconnectTo(PAL::SessionID sessionID, WebKit::WebPageProxyIdentifier webPageProxyID, WebCore::PageIdentifier webPageID, URL url, String userAgent, enum:uint8_t WebCore::StoredCredentialsPolicy storedCredentialsPolicy, enum:bool Optional<WebKit::NavigatingToAppBoundDomain> isNavigatingToAppBoundDomain, enum:bool WebKit::LastNavigationWasAppBound lastNavigationWasAppBound); |      PreconnectTo(PAL::SessionID sessionID, WebKit::WebPageProxyIdentifier webPageProxyID, WebCore::PageIdentifier webPageID, URL url, String userAgent, enum:uint8_t WebCore::StoredCredentialsPolicy storedCredentialsPolicy, enum:bool Optional<WebKit::NavigatingToAppBoundDomain> isNavigatingToAppBoundDomain, enum:bool WebKit::LastNavigationWasAppBound lastNavigationWasAppBound); | ||||||
|   |   | ||||||
|  | @ -8688,6 +8728,8 @@ index 40ea12a0d44aeda21492e852479d6a8dc22d83c8..2147d9ef376525346db7cdbe303a0d8f | ||||||
| +    SetCookies(PAL::SessionID sessionID, Vector<WebCore::Cookie> cookies) -> (bool success) Async
 | +    SetCookies(PAL::SessionID sessionID, Vector<WebCore::Cookie> cookies) -> (bool success) Async
 | ||||||
| +    DeleteAllCookies(PAL::SessionID sessionID) -> (bool success) Async
 | +    DeleteAllCookies(PAL::SessionID sessionID) -> (bool success) Async
 | ||||||
| +    SetIgnoreCertificateErrors(PAL::SessionID sessionID, bool ignoreTLSErrors)
 | +    SetIgnoreCertificateErrors(PAL::SessionID sessionID, bool ignoreTLSErrors)
 | ||||||
|  | +
 | ||||||
|  | +    GetLocalStorageData(PAL::SessionID sessionID) -> (Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>> origins) Async
 | ||||||
| +
 | +
 | ||||||
|  #if ENABLE(RESOURCE_LOAD_STATISTICS) |  #if ENABLE(RESOURCE_LOAD_STATISTICS) | ||||||
|      ClearPrevalentResource(PAL::SessionID sessionID, WebCore::RegistrableDomain resourceDomain) -> () Async |      ClearPrevalentResource(PAL::SessionID sessionID, WebCore::RegistrableDomain resourceDomain) -> () Async | ||||||
|  | @ -8727,6 +8769,134 @@ index 48c883bfc0fc7d501c8a4a4e7684ccc33e38c14d..20dedbbaf4b1a713c8be41e21425c307 | ||||||
|      , m_delayFailTimer(*this, &NetworkSocketStream::sendDelayedFailMessage) |      , m_delayFailTimer(*this, &NetworkSocketStream::sendDelayedFailMessage) | ||||||
|  { |  { | ||||||
|  } |  } | ||||||
|  | diff --git a/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp b/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp
 | ||||||
|  | index 60153bf7d6b07f58e0ea1595a14fc8c81353c149..5c0907b31551b576aeed1e9d26f4f5bcce055ec2 100644
 | ||||||
|  | --- a/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp
 | ||||||
|  | +++ b/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.cpp
 | ||||||
|  | @@ -29,6 +29,7 @@
 | ||||||
|  |  #include "StorageArea.h" | ||||||
|  |  #include "StorageManager.h" | ||||||
|  |  #include <WebCore/SecurityOriginData.h> | ||||||
|  | +#include <wtf/Forward.h>
 | ||||||
|  |   | ||||||
|  |  namespace WebKit { | ||||||
|  |   | ||||||
|  | @@ -103,4 +104,11 @@ Vector<StorageAreaIdentifier> LocalStorageNamespace::storageAreaIdentifiers() co
 | ||||||
|  |      return identifiers; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +void LocalStorageNamespace::forEachStorageArea(Function<void(const StorageArea&)> callback) const
 | ||||||
|  | +{
 | ||||||
|  | +    ASSERT(!RunLoop::isMain());
 | ||||||
|  | +    for (auto& storageArea : m_storageAreaMap.values())
 | ||||||
|  | +        callback(*storageArea);
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  } // namespace WebKit | ||||||
|  | diff --git a/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h b/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h
 | ||||||
|  | index adca9f4a255f58e2106dd6a4eceaddfff2451ac3..81f6c0bde82ea58ed5abc5e3653bb64a3377f531 100644
 | ||||||
|  | --- a/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h
 | ||||||
|  | +++ b/Source/WebKit/NetworkProcess/WebStorage/LocalStorageNamespace.h
 | ||||||
|  | @@ -28,7 +28,7 @@
 | ||||||
|  |  #include "StorageAreaIdentifier.h" | ||||||
|  |  #include "StorageNamespaceIdentifier.h" | ||||||
|  |  #include <WebCore/SecurityOriginData.h> | ||||||
|  | -#include <wtf/Forward.h>
 | ||||||
|  | +#include <wtf/Function.h>
 | ||||||
|  |  #include <wtf/HashMap.h> | ||||||
|  |  #include <wtf/WeakPtr.h> | ||||||
|  |  #include <wtf/WorkQueue.h> | ||||||
|  | @@ -59,6 +59,8 @@ public:
 | ||||||
|  |   | ||||||
|  |      Vector<StorageAreaIdentifier> storageAreaIdentifiers() const; | ||||||
|  |   | ||||||
|  | +    void forEachStorageArea(Function<void(const StorageArea&)>) const;
 | ||||||
|  | +
 | ||||||
|  |  private: | ||||||
|  |      StorageManager& m_storageManager; | ||||||
|  |      unsigned m_quotaInBytes { 0 }; | ||||||
|  | diff --git a/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp b/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp
 | ||||||
|  | index 5bcca299ba415e39c02845997e5806b2846da93c..a7526a2adbd93ecb3e16a9b8b8f754152c79f2d4 100644
 | ||||||
|  | --- a/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp
 | ||||||
|  | +++ b/Source/WebKit/NetworkProcess/WebStorage/StorageManager.cpp
 | ||||||
|  | @@ -147,6 +147,19 @@ HashSet<SecurityOriginData> StorageManager::getLocalStorageOriginsCrossThreadCop
 | ||||||
|  |      return origins; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>> StorageManager::getLocalStorageDataCrossThreadCopy() const
 | ||||||
|  | +{
 | ||||||
|  | +    ASSERT(!RunLoop::isMain());
 | ||||||
|  | +
 | ||||||
|  | +    Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>> result;
 | ||||||
|  | +    for (const auto& localStorageNameSpace : m_localStorageNamespaces.values()) {
 | ||||||
|  | +        localStorageNameSpace->forEachStorageArea([&] (const StorageArea& area) {
 | ||||||
|  | +            result.append({ area.securityOrigin().isolatedCopy(), area.items() });
 | ||||||
|  | +        });
 | ||||||
|  | +    }
 | ||||||
|  | +    return result;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  Vector<LocalStorageDatabaseTracker::OriginDetails> StorageManager::getLocalStorageOriginDetailsCrossThreadCopy() const | ||||||
|  |  { | ||||||
|  |      ASSERT(!RunLoop::isMain()); | ||||||
|  | diff --git a/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h b/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h
 | ||||||
|  | index 0d6e7aedff68227bf7dc8ab7184abc6fd3321c54..67b616d818aa42f8cae33f0535c888cd4c5ec07e 100644
 | ||||||
|  | --- a/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h
 | ||||||
|  | +++ b/Source/WebKit/NetworkProcess/WebStorage/StorageManager.h
 | ||||||
|  | @@ -66,6 +66,7 @@ public:
 | ||||||
|  |      void deleteSessionStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>&); | ||||||
|  |   | ||||||
|  |      HashSet<WebCore::SecurityOriginData> getLocalStorageOriginsCrossThreadCopy() const; | ||||||
|  | +    Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>> getLocalStorageDataCrossThreadCopy() const;
 | ||||||
|  |      void deleteLocalStorageOriginsModifiedSince(WallTime); | ||||||
|  |      void deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>&); | ||||||
|  |      Vector<LocalStorageDatabaseTracker::OriginDetails> getLocalStorageOriginDetailsCrossThreadCopy() const; | ||||||
|  | diff --git a/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp b/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp
 | ||||||
|  | index f9e843de37319dd6c5c1063a3cdcf5c1d4bba195..f1ad21127d562ab469443cafa332abec6d9840c5 100644
 | ||||||
|  | --- a/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp
 | ||||||
|  | +++ b/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.cpp
 | ||||||
|  | @@ -253,6 +253,21 @@ void StorageManagerSet::getLocalStorageOrigins(PAL::SessionID sessionID, GetOrig
 | ||||||
|  |      }); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +void StorageManagerSet::getLocalStorageData(PAL::SessionID sessionID, GetLocalStorageDataCallback&& completionHandler)
 | ||||||
|  | +{
 | ||||||
|  | +    ASSERT(RunLoop::isMain());
 | ||||||
|  | +
 | ||||||
|  | +    m_queue->dispatch([this, protectedThis = makeRef(*this), sessionID, completionHandler = WTFMove(completionHandler)]() mutable {
 | ||||||
|  | +        auto* storageManager = m_storageManagers.get(sessionID);
 | ||||||
|  | +        ASSERT(storageManager);
 | ||||||
|  | +
 | ||||||
|  | +        auto origins = storageManager->getLocalStorageDataCrossThreadCopy();
 | ||||||
|  | +        RunLoop::main().dispatch([completionHandler = WTFMove(completionHandler), origins = WTFMove(origins)]() mutable {
 | ||||||
|  | +            completionHandler(WTFMove(origins));
 | ||||||
|  | +        });
 | ||||||
|  | +    });
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  void StorageManagerSet::deleteLocalStorageModifiedSince(PAL::SessionID sessionID, WallTime time, DeleteCallback&& completionHandler) | ||||||
|  |  { | ||||||
|  |      ASSERT(RunLoop::isMain()); | ||||||
|  | diff --git a/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.h b/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.h
 | ||||||
|  | index 70a65a4ba68f7725b90f52f4d7a9c55fd96bcfed..81dd1d49f98ecefcb2e63670aa08eac617e48bcf 100644
 | ||||||
|  | --- a/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.h
 | ||||||
|  | +++ b/Source/WebKit/NetworkProcess/WebStorage/StorageManagerSet.h
 | ||||||
|  | @@ -45,6 +45,7 @@ using ConnectToStorageAreaCallback = CompletionHandler<void(const Optional<Stora
 | ||||||
|  |  using GetValuesCallback = CompletionHandler<void(const HashMap<String, String>&)>; | ||||||
|  |  using GetOriginsCallback = CompletionHandler<void(HashSet<WebCore::SecurityOriginData>&&)>; | ||||||
|  |  using GetOriginDetailsCallback = CompletionHandler<void(Vector<LocalStorageDatabaseTracker::OriginDetails>&&)>; | ||||||
|  | +using GetLocalStorageDataCallback = CompletionHandler<void(Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>>&&)>;
 | ||||||
|  |  using DeleteCallback = CompletionHandler<void()>; | ||||||
|  |   | ||||||
|  |  class StorageManagerSet : public IPC::Connection::WorkQueueMessageReceiver { | ||||||
|  | @@ -72,6 +73,7 @@ public:
 | ||||||
|  |      void deleteLocalStorageModifiedSince(PAL::SessionID, WallTime, DeleteCallback&&); | ||||||
|  |      void deleteLocalStorageForOrigins(PAL::SessionID, const Vector<WebCore::SecurityOriginData>&, DeleteCallback&&); | ||||||
|  |      void getLocalStorageOriginDetails(PAL::SessionID, GetOriginDetailsCallback&&); | ||||||
|  | +    void getLocalStorageData(PAL::SessionID, GetLocalStorageDataCallback&&);
 | ||||||
|  |      void renameOrigin(PAL::SessionID, const URL&, const URL&, CompletionHandler<void()>&&); | ||||||
|  |   | ||||||
|  |      void didReceiveMessage(IPC::Connection&, IPC::Decoder&); | ||||||
| diff --git a/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h b/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
 | diff --git a/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h b/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
 | ||||||
| index d91819fc14c3d65f993917a4a3e88bd36b09c6c1..dccc51729796babfcc3c6e81251404f61b3e40e1 100644
 | index d91819fc14c3d65f993917a4a3e88bd36b09c6c1..dccc51729796babfcc3c6e81251404f61b3e40e1 100644
 | ||||||
| --- a/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
 | --- a/Source/WebKit/NetworkProcess/cocoa/NetworkDataTaskCocoa.h
 | ||||||
|  | @ -13990,10 +14160,10 @@ index 0000000000000000000000000000000000000000..d0e11ed81a6257c011df23d5870da740 | ||||||
| +} // namespace WebKit
 | +} // namespace WebKit
 | ||||||
| diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp
 | diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp
 | ||||||
| new file mode 100644 | new file mode 100644 | ||||||
| index 0000000000000000000000000000000000000000..f55fb6443a7478fb8532c73e3ec7ae8f0f3e8380
 | index 0000000000000000000000000000000000000000..6e510ec9b7625a3298e71ad24a33ad018cc55eb0
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp
 | +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp
 | ||||||
| @@ -0,0 +1,888 @@
 | @@ -0,0 +1,921 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (C) 2019 Microsoft Corporation.
 | + * Copyright (C) 2019 Microsoft Corporation.
 | ||||||
| + *
 | + *
 | ||||||
|  | @ -14040,6 +14210,7 @@ index 0000000000000000000000000000000000000000..f55fb6443a7478fb8532c73e3ec7ae8f | ||||||
| +#include "WebPageProxy.h"
 | +#include "WebPageProxy.h"
 | ||||||
| +#include "WebProcessPool.h"
 | +#include "WebProcessPool.h"
 | ||||||
| +#include "WebProcessProxy.h"
 | +#include "WebProcessProxy.h"
 | ||||||
|  | +#include "WebsiteDataRecord.h"
 | ||||||
| +#include <WebCore/FrameIdentifier.h>
 | +#include <WebCore/FrameIdentifier.h>
 | ||||||
| +#include <WebCore/GeolocationPositionData.h>
 | +#include <WebCore/GeolocationPositionData.h>
 | ||||||
| +#include <WebCore/InspectorPageAgent.h>
 | +#include <WebCore/InspectorPageAgent.h>
 | ||||||
|  | @ -14553,6 +14724,38 @@ index 0000000000000000000000000000000000000000..f55fb6443a7478fb8532c73e3ec7ae8f | ||||||
| +    m_client->deleteBrowserContext(errorString, sessionID);
 | +    m_client->deleteBrowserContext(errorString, sessionID);
 | ||||||
| +}
 | +}
 | ||||||
| +
 | +
 | ||||||
|  | +void InspectorPlaywrightAgent::getLocalStorageData(const String& browserContextID, Ref<GetLocalStorageDataCallback>&& callback)
 | ||||||
|  | +{
 | ||||||
|  | +    String errorString;
 | ||||||
|  | +    BrowserContext* browserContext = lookupBrowserContext(errorString, browserContextID);
 | ||||||
|  | +    if (!lookupBrowserContext(errorString, browserContextID)) {
 | ||||||
|  | +        callback->sendFailure(errorString);
 | ||||||
|  | +        return;
 | ||||||
|  | +    }
 | ||||||
|  | +    PAL::SessionID sessionID = browserContext->dataStore->sessionID();
 | ||||||
|  | +    NetworkProcessProxy& networkProcess = browserContext->dataStore->networkProcess();
 | ||||||
|  | +    networkProcess.sendWithAsyncReply(Messages::NetworkProcess::GetLocalStorageData(sessionID),
 | ||||||
|  | +        [callback = WTFMove(callback)](Vector<std::pair<WebCore::SecurityOriginData, HashMap<String, String>>>&& data) {
 | ||||||
|  | +            if (!callback->isActive())
 | ||||||
|  | +                return;
 | ||||||
|  | +            auto origins = JSON::ArrayOf<Inspector::Protocol::Playwright::OriginStorage>::create();
 | ||||||
|  | +            for (const auto& originData : data) {
 | ||||||
|  | +                auto items = JSON::ArrayOf<Protocol::Playwright::NameValue>::create();
 | ||||||
|  | +                for (const auto& entry : originData.second) {
 | ||||||
|  | +                    items->addItem(Protocol::Playwright::NameValue::create()
 | ||||||
|  | +                        .setName(entry.key)
 | ||||||
|  | +                        .setValue(entry.value)
 | ||||||
|  | +                        .release());
 | ||||||
|  | +                }
 | ||||||
|  | +                origins->addItem(Protocol::Playwright::OriginStorage::create()
 | ||||||
|  | +                    .setOrigin(originData.first.toString())
 | ||||||
|  | +                    .setItems(WTFMove(items))
 | ||||||
|  | +                    .release());
 | ||||||
|  | +            }
 | ||||||
|  | +            callback->sendSuccess(WTFMove(origins));
 | ||||||
|  | +        }, 0);
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
| +Inspector::Protocol::ErrorStringOr<String /* pageProxyID */> InspectorPlaywrightAgent::createPage(const String& browserContextID)
 | +Inspector::Protocol::ErrorStringOr<String /* pageProxyID */> InspectorPlaywrightAgent::createPage(const String& browserContextID)
 | ||||||
| +{
 | +{
 | ||||||
| +    String errorString;
 | +    String errorString;
 | ||||||
|  | @ -14884,10 +15087,10 @@ index 0000000000000000000000000000000000000000..f55fb6443a7478fb8532c73e3ec7ae8f | ||||||
| +#endif // ENABLE(REMOTE_INSPECTOR)
 | +#endif // ENABLE(REMOTE_INSPECTOR)
 | ||||||
| diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h
 | diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h
 | ||||||
| new file mode 100644 | new file mode 100644 | ||||||
| index 0000000000000000000000000000000000000000..f5eecb22827ecd3b002cb1dd9e9938a1db0cb36e
 | index 0000000000000000000000000000000000000000..bbd82de8a82efc37c2d63beb58b6e2c443224698
 | ||||||
| --- /dev/null
 | --- /dev/null
 | ||||||
| +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h
 | +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h
 | ||||||
| @@ -0,0 +1,123 @@
 | @@ -0,0 +1,125 @@
 | ||||||
| +/*
 | +/*
 | ||||||
| + * Copyright (C) 2019 Microsoft Corporation.
 | + * Copyright (C) 2019 Microsoft Corporation.
 | ||||||
| + *
 | + *
 | ||||||
|  | @ -14981,6 +15184,8 @@ index 0000000000000000000000000000000000000000..f5eecb22827ecd3b002cb1dd9e9938a1 | ||||||
| +    void setCookies(const String& browserContextID, Ref<JSON::Array>&& in_cookies, Ref<SetCookiesCallback>&&) override;
 | +    void setCookies(const String& browserContextID, Ref<JSON::Array>&& in_cookies, Ref<SetCookiesCallback>&&) override;
 | ||||||
| +    void deleteAllCookies(const String& browserContextID, Ref<DeleteAllCookiesCallback>&&) override;
 | +    void deleteAllCookies(const String& browserContextID, Ref<DeleteAllCookiesCallback>&&) override;
 | ||||||
| +
 | +
 | ||||||
|  | +    void getLocalStorageData(const String& browserContextID, Ref<GetLocalStorageDataCallback>&&) override;
 | ||||||
|  | +
 | ||||||
| +    Inspector::Protocol::ErrorStringOr<void> setGeolocationOverride(const String& browserContextID, RefPtr<JSON::Object>&& geolocation) override;
 | +    Inspector::Protocol::ErrorStringOr<void> setGeolocationOverride(const String& browserContextID, RefPtr<JSON::Object>&& geolocation) override;
 | ||||||
| +    Inspector::Protocol::ErrorStringOr<void> setLanguages(Ref<JSON::Array>&& languages, const String& browserContextID) override;
 | +    Inspector::Protocol::ErrorStringOr<void> setLanguages(Ref<JSON::Array>&& languages, const String& browserContextID) override;
 | ||||||
| +    Inspector::Protocol::ErrorStringOr<void> setDownloadBehavior(const String& behavior, const String& downloadPath, const String& browserContextID) override;
 | +    Inspector::Protocol::ErrorStringOr<void> setDownloadBehavior(const String& behavior, const String& downloadPath, const String& browserContextID) override;
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue