browser(webkit): manager permissions on the proxy level (#1450)
This commit is contained in:
		
							parent
							
								
									bae56ea9d3
								
							
						
					
					
						commit
						5fc1a04412
					
				|  | @ -1 +1 @@ | |||
| 1181 | ||||
| 1182 | ||||
|  |  | |||
|  | @ -537,10 +537,10 @@ index 0000000000000000000000000000000000000000..79edea03fed4e9be5da96e1275e182a4 | |||
| +}
 | ||||
| diff --git a/Source/JavaScriptCore/inspector/protocol/Emulation.json b/Source/JavaScriptCore/inspector/protocol/Emulation.json
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..552e5dd60fa53fada79f8d6e333f52bc10a2bead
 | ||||
| index 0000000000000000000000000000000000000000..3f28f8e41b39c517369c8ca69415486a75657489
 | ||||
| --- /dev/null
 | ||||
| +++ b/Source/JavaScriptCore/inspector/protocol/Emulation.json
 | ||||
| @@ -0,0 +1,39 @@
 | ||||
| @@ -0,0 +1,51 @@
 | ||||
| +{
 | ||||
| +    "domain": "Emulation",
 | ||||
| +    "availability": ["web"],
 | ||||
|  | @ -577,6 +577,18 @@ index 0000000000000000000000000000000000000000..552e5dd60fa53fada79f8d6e333f52bc | |||
| +            "parameters": [
 | ||||
| +                { "name": "active", "type": "boolean", "optional": true }
 | ||||
| +            ]
 | ||||
| +        },
 | ||||
| +        {
 | ||||
| +            "name": "grantPermissions",
 | ||||
| +            "parameters": [
 | ||||
| +                { "name": "origin", "type": "string" },
 | ||||
| +                { "name": "permissions", "type": "array", "items": { "type": "string" } }
 | ||||
| +            ],
 | ||||
| +            "description": "Overrides the permissions."
 | ||||
| +        },
 | ||||
| +        {
 | ||||
| +            "name": "resetPermissions",
 | ||||
| +            "description": "Clears permission overrides."
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
|  | @ -1048,10 +1060,10 @@ index a8fc5332ac92424b00a3dec62152fd3c5f28544e..6aa07fd2ee4e0dff43b151d1cee7497f | |||
|  } | ||||
| diff --git a/Source/JavaScriptCore/inspector/protocol/Playwright.json b/Source/JavaScriptCore/inspector/protocol/Playwright.json
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..cb021782b238f318f4b09c6f99699a8e184c1d75
 | ||||
| index 0000000000000000000000000000000000000000..f57b7187ed65ae84b9a1cff7918dad074bb57a4f
 | ||||
| --- /dev/null
 | ||||
| +++ b/Source/JavaScriptCore/inspector/protocol/Playwright.json
 | ||||
| @@ -0,0 +1,220 @@
 | ||||
| @@ -0,0 +1,204 @@
 | ||||
| +{
 | ||||
| +    "domain": "Playwright",
 | ||||
| +    "availability": ["web"],
 | ||||
|  | @ -1215,22 +1227,6 @@ index 0000000000000000000000000000000000000000..cb021782b238f318f4b09c6f99699a8e | |||
| +            "description": "Overrides the geolocation position or error."
 | ||||
| +        },
 | ||||
| +        {
 | ||||
| +            "name": "grantPermissions",
 | ||||
| +            "parameters": [
 | ||||
| +                { "name": "browserContextId", "$ref": "ContextID", "optional": true, "description": "Browser context id." },
 | ||||
| +                { "name": "origin", "type": "string" },
 | ||||
| +                { "name": "permissions", "type": "array", "items": { "type": "string" } }
 | ||||
| +            ],
 | ||||
| +            "description": "Overrides the permissions."
 | ||||
| +        },
 | ||||
| +        {
 | ||||
| +            "name": "resetPermissions",
 | ||||
| +            "parameters": [
 | ||||
| +                { "name": "browserContextId", "$ref": "ContextID", "optional": true, "description": "Browser context id." }
 | ||||
| +            ],
 | ||||
| +            "description": "Clears permission overrides."
 | ||||
| +        },
 | ||||
| +        {
 | ||||
| +            "name": "setLanguages",
 | ||||
| +            "description": "Allows to set locale language for context.",
 | ||||
| +            "parameters": [
 | ||||
|  | @ -8382,10 +8378,10 @@ index 0000000000000000000000000000000000000000..f356c613945fd263889bc74166bef2b2 | |||
| +} // namespace WebKit
 | ||||
| diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..66bf9c54ac5e882c5c725389ea19584438a94446
 | ||||
| index 0000000000000000000000000000000000000000..a73982f6999b28e452896ad4ebd9f449b79f8385
 | ||||
| --- /dev/null
 | ||||
| +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.cpp
 | ||||
| @@ -0,0 +1,634 @@
 | ||||
| @@ -0,0 +1,597 @@
 | ||||
| +/*
 | ||||
| + * Copyright (C) 2019 Microsoft Corporation.
 | ||||
| + *
 | ||||
|  | @ -8707,7 +8703,6 @@ index 0000000000000000000000000000000000000000..66bf9c54ac5e882c5c725389ea195844 | |||
| +    RefPtr<WebPageProxy> page = m_client->createPage(errorString, browserContext);
 | ||||
| +    if (!page)
 | ||||
| +        return;
 | ||||
| +    page->setPermissionsForAutomation(m_permissions.get(browserContextID ? *browserContextID : ""));
 | ||||
| +    *pageProxyID = toPageProxyIDProtocolString(*page);
 | ||||
| +}
 | ||||
| +
 | ||||
|  | @ -8901,42 +8896,6 @@ index 0000000000000000000000000000000000000000..66bf9c54ac5e882c5c725389ea195844 | |||
| +        }, 0);
 | ||||
| +}
 | ||||
| +
 | ||||
| +void InspectorPlaywrightAgent::grantPermissions(Inspector::ErrorString& errorString, const String* browserContextID, const String& origin, const JSON::Array& values)
 | ||||
| +{
 | ||||
| +    BrowserContext browserContext = lookupBrowserContext(errorString, browserContextID);
 | ||||
| +    if (!errorString.isEmpty())
 | ||||
| +        return;
 | ||||
| +    HashSet<String> set;
 | ||||
| +    for (const auto& value : values) {
 | ||||
| +        String name;
 | ||||
| +        if (!value->asString(name)) {
 | ||||
| +            errorString = "Permission must be a string"_s;
 | ||||
| +            return;
 | ||||
| +        }
 | ||||
| +        set.add(name);
 | ||||
| +    }
 | ||||
| +    String key = browserContextID ? *browserContextID : "";
 | ||||
| +    auto it = m_permissions.add(key, Permissions()).iterator;
 | ||||
| +    it->value.set(origin, WTFMove(set));
 | ||||
| +    Vector<WebPageProxy*> pages;
 | ||||
| +    for (auto& process : browserContext.processPool->processes()) {
 | ||||
| +        for (auto* page : process->pages())
 | ||||
| +            page->setPermissionsForAutomation(it->value);
 | ||||
| +    }
 | ||||
| +}
 | ||||
| +
 | ||||
| +void InspectorPlaywrightAgent::resetPermissions(Inspector::ErrorString& errorString, const String* browserContextID)
 | ||||
| +{
 | ||||
| +    BrowserContext browserContext = lookupBrowserContext(errorString, browserContextID);
 | ||||
| +    if (!errorString.isEmpty())
 | ||||
| +        return;
 | ||||
| +    m_permissions.clear();
 | ||||
| +    for (auto& process : browserContext.processPool->processes()) {
 | ||||
| +        for (auto* page : process->pages())
 | ||||
| +            page->setPermissionsForAutomation(HashMap<String, HashSet<String>>());
 | ||||
| +    }
 | ||||
| +}
 | ||||
| +
 | ||||
| +void InspectorPlaywrightAgent::setLanguages(Inspector::ErrorString& errorString, const JSON::Array& languages, const String* browserContextID)
 | ||||
| +{
 | ||||
| +    BrowserContext browserContext = lookupBrowserContext(errorString, browserContextID);
 | ||||
|  | @ -9022,10 +8981,10 @@ index 0000000000000000000000000000000000000000..66bf9c54ac5e882c5c725389ea195844 | |||
| +#endif // ENABLE(REMOTE_INSPECTOR)
 | ||||
| diff --git a/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..2b5518c9f7b054746a98552c24c8752eb7acb10b
 | ||||
| index 0000000000000000000000000000000000000000..cc30c0bed90910351e0fd29f2577b8030bd0597e
 | ||||
| --- /dev/null
 | ||||
| +++ b/Source/WebKit/UIProcess/InspectorPlaywrightAgent.h
 | ||||
| @@ -0,0 +1,122 @@
 | ||||
| @@ -0,0 +1,118 @@
 | ||||
| +/*
 | ||||
| + * Copyright (C) 2019 Microsoft Corporation.
 | ||||
| + *
 | ||||
|  | @ -9121,8 +9080,6 @@ index 0000000000000000000000000000000000000000..2b5518c9f7b054746a98552c24c8752e | |||
| +    void setCookies(const String* browserContextID, const JSON::Array& in_cookies, Ref<SetCookiesCallback>&&) override;
 | ||||
| +    void deleteAllCookies(const String* browserContextID, Ref<DeleteAllCookiesCallback>&&) override;
 | ||||
| +
 | ||||
| +    void grantPermissions(Inspector::ErrorString&, const String* browserContextID, const String& origin, const JSON::Array& permissions) override;
 | ||||
| +    void resetPermissions(Inspector::ErrorString&, const String* browserContextID) override;
 | ||||
| +    void setGeolocationOverride(Inspector::ErrorString&, const String* browserContextID, const JSON::Object* geolocation) override;
 | ||||
| +    void setLanguages(Inspector::ErrorString&, const JSON::Array& languages, const String* browserContextID) override;
 | ||||
| +
 | ||||
|  | @ -9138,8 +9095,6 @@ index 0000000000000000000000000000000000000000..2b5518c9f7b054746a98552c24c8752e | |||
| +    Ref<Inspector::PlaywrightBackendDispatcher> m_backendDispatcher;
 | ||||
| +    InspectorPlaywrightAgentClient* m_client;
 | ||||
| +    PageProxyIDMap& m_pageProxyIDMap;
 | ||||
| +    using Permissions = HashMap<String, HashSet<String>>;
 | ||||
| +    HashMap<String, Permissions> m_permissions;
 | ||||
| +    HashMap<String, BrowserContext> m_browserContexts;
 | ||||
| +    HashMap<PAL::SessionID, std::unique_ptr<BrowserContextDeletion>> m_browserContextDeletions;
 | ||||
| +    bool m_isConnected { false };
 | ||||
|  | @ -9564,10 +9519,10 @@ index 04f3227cd55c992a42cd96a3f25d697aed7965a2..f0d36935f47bab03ea2ec50b70509206 | |||
|   | ||||
| diff --git a/Source/WebKit/UIProcess/WebPageInspectorEmulationAgent.cpp b/Source/WebKit/UIProcess/WebPageInspectorEmulationAgent.cpp
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..c863bd49011debe4b06cab64c113810809633777
 | ||||
| index 0000000000000000000000000000000000000000..3983c25682b06bbbf9ae9fde95b5b9c349ae6abe
 | ||||
| --- /dev/null
 | ||||
| +++ b/Source/WebKit/UIProcess/WebPageInspectorEmulationAgent.cpp
 | ||||
| @@ -0,0 +1,124 @@
 | ||||
| @@ -0,0 +1,145 @@
 | ||||
| +/*
 | ||||
| + * Copyright (C) 2019 Microsoft Corporation.
 | ||||
| + *
 | ||||
|  | @ -9684,6 +9639,27 @@ index 0000000000000000000000000000000000000000..c863bd49011debe4b06cab64c1138108 | |||
| +    m_page.setActiveForAutomation(value);
 | ||||
| +}
 | ||||
| +
 | ||||
| +void WebPageInspectorEmulationAgent::grantPermissions(Inspector::ErrorString& errorString, const String& origin, const JSON::Array& values)
 | ||||
| +{
 | ||||
| +    HashSet<String> set;
 | ||||
| +    for (const auto& value : values) {
 | ||||
| +        String name;
 | ||||
| +        if (!value->asString(name)) {
 | ||||
| +            errorString = "Permission must be a string"_s;
 | ||||
| +            return;
 | ||||
| +        }
 | ||||
| +        set.add(name);
 | ||||
| +    }
 | ||||
| +    m_permissions.set(origin, WTFMove(set));
 | ||||
| +    m_page.setPermissionsForAutomation(m_permissions);
 | ||||
| +}
 | ||||
| +
 | ||||
| +void WebPageInspectorEmulationAgent::resetPermissions(Inspector::ErrorString&)
 | ||||
| +{
 | ||||
| +    m_permissions.clear();
 | ||||
| +    m_page.setPermissionsForAutomation(m_permissions);
 | ||||
| +}
 | ||||
| +
 | ||||
| +void WebPageInspectorEmulationAgent::didShowPage()
 | ||||
| +{
 | ||||
| +    for (auto& command : m_commandsToRunWhenShown)
 | ||||
|  | @ -9694,10 +9670,10 @@ index 0000000000000000000000000000000000000000..c863bd49011debe4b06cab64c1138108 | |||
| +} // namespace WebKit
 | ||||
| diff --git a/Source/WebKit/UIProcess/WebPageInspectorEmulationAgent.h b/Source/WebKit/UIProcess/WebPageInspectorEmulationAgent.h
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..61969d8e4598f624df03beb56fc67375b9386edf
 | ||||
| index 0000000000000000000000000000000000000000..5ae0ce152f06b8316dbfbbbb2efd1990a31687d0
 | ||||
| --- /dev/null
 | ||||
| +++ b/Source/WebKit/UIProcess/WebPageInspectorEmulationAgent.h
 | ||||
| @@ -0,0 +1,72 @@
 | ||||
| @@ -0,0 +1,75 @@
 | ||||
| +/*
 | ||||
| + * Copyright (C) 2019 Microsoft Corporation.
 | ||||
| + *
 | ||||
|  | @ -9757,6 +9733,8 @@ index 0000000000000000000000000000000000000000..61969d8e4598f624df03beb56fc67375 | |||
| +    void setJavaScriptEnabled(Inspector::ErrorString&, bool enabled) override;
 | ||||
| +    void setAuthCredentials(Inspector::ErrorString&, const String*, const String*) override;
 | ||||
| +    void setActiveAndFocused(Inspector::ErrorString&, const bool*) override;
 | ||||
| +    void grantPermissions(Inspector::ErrorString&, const String& origin, const JSON::Array& permissions) override;
 | ||||
| +    void resetPermissions(Inspector::ErrorString&) override;
 | ||||
| +
 | ||||
| +    void didShowPage();
 | ||||
| +
 | ||||
|  | @ -9767,6 +9745,7 @@ index 0000000000000000000000000000000000000000..61969d8e4598f624df03beb56fc67375 | |||
| +    Ref<Inspector::EmulationBackendDispatcher> m_backendDispatcher;
 | ||||
| +    WebPageProxy& m_page;
 | ||||
| +    Vector<Function<void()>> m_commandsToRunWhenShown;
 | ||||
| +    HashMap<String, HashSet<String>> m_permissions;
 | ||||
| +};
 | ||||
| +
 | ||||
| +} // namespace WebKit
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue