From 8ebe42b2ca06a57a08b02a975146af34c1b9bcd6 Mon Sep 17 00:00:00 2001 From: "huayong.xu" Date: Tue, 24 Aug 2021 09:45:39 +0800 Subject: [PATCH] Implement more request interceptor APIs. Change-Id: Ie8b2d5247431d428c28d17153e98fa6812c2f93b --- .../dali-toolkit-test-utils/toolkit-web-engine.cpp | 102 ++++++++++++++------- .../src/dali-toolkit/utc-Dali-WebView.cpp | 92 +++++++++++-------- .../devel-api/controls/web-view/web-context.cpp | 5 + .../devel-api/controls/web-view/web-context.h | 7 ++ .../devel-api/controls/web-view/web-view.cpp | 5 - .../devel-api/controls/web-view/web-view.h | 7 -- .../internal/controls/web-view/web-view-impl.cpp | 9 -- .../internal/controls/web-view/web-view-impl.h | 5 - 8 files changed, 133 insertions(+), 99 deletions(-) mode change 100644 => 100755 dali-toolkit/internal/controls/web-view/web-view-impl.cpp diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp index c1d8700..8f8853c 100755 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-web-engine.cpp @@ -83,6 +83,7 @@ bool OnStorageUsageAcquired(); bool OnFormPasswordAcquired(); bool OnDownloadStarted(); bool OnMimeOverridden(); +bool OnRequestIntercepted(); bool OnChangesWatch(); bool OnPlainTextReceived(); @@ -155,7 +156,7 @@ public: { } - bool GetWebDatabaseOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) + bool GetWebDatabaseOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) override { if (callback) { @@ -165,12 +166,12 @@ public: return true; } - bool DeleteWebDatabase(Dali::WebEngineSecurityOrigin& origin) + bool DeleteWebDatabase(Dali::WebEngineSecurityOrigin& origin) override { return true; } - bool GetWebStorageOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) + bool GetWebStorageOrigins(Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback callback) override { if (callback) { @@ -180,7 +181,7 @@ public: return true; } - bool GetWebStorageUsageForOrigin(Dali::WebEngineSecurityOrigin& origin, Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback callback) + bool GetWebStorageUsageForOrigin(Dali::WebEngineSecurityOrigin& origin, Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback callback) override { if (callback) { @@ -194,7 +195,7 @@ public: { } - bool DeleteWebStorage(Dali::WebEngineSecurityOrigin& origin) + bool DeleteWebStorage(Dali::WebEngineSecurityOrigin& origin) override { return true; } @@ -207,12 +208,12 @@ public: { } - bool DeleteApplicationCache(Dali::WebEngineSecurityOrigin& origin) + bool DeleteApplicationCache(Dali::WebEngineSecurityOrigin& origin) override { return true; } - void GetFormPasswordList(Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback callback) + void GetFormPasswordList(Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback callback) override { if (callback) { @@ -221,7 +222,7 @@ public: } } - void RegisterDownloadStartedCallback(Dali::WebEngineContext::WebEngineDownloadStartedCallback callback) + void RegisterDownloadStartedCallback(Dali::WebEngineContext::WebEngineDownloadStartedCallback callback) override { if (callback) { @@ -230,7 +231,7 @@ public: } } - void RegisterMimeOverriddenCallback(Dali::WebEngineContext::WebEngineMimeOverriddenCallback callback) + void RegisterMimeOverriddenCallback(Dali::WebEngineContext::WebEngineMimeOverriddenCallback callback) override { if (callback) { @@ -239,6 +240,15 @@ public: } } + void RegisterRequestInterceptedCallback(Dali::WebEngineContext::WebEngineRequestInterceptedCallback callback) override + { + if (callback) + { + ConnectToGlobalSignal(&OnRequestIntercepted); + mRequestInterceptedCallback = callback; + } + } + void EnableCache( bool cacheEnabled ) override { mockCacheEnabled = cacheEnabled; @@ -317,10 +327,11 @@ public: public: Dali::WebEngineContext::WebEngineSecurityOriginAcquiredCallback mSecurityOriginAcquiredCallback; - Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback mStorageUsageAcquiredCallback; - Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback mFormPasswordAcquiredCallback; - Dali::WebEngineContext::WebEngineDownloadStartedCallback mDownloadStartedCallback; - Dali::WebEngineContext::WebEngineMimeOverriddenCallback mMimeOverriddenCallback; + Dali::WebEngineContext::WebEngineStorageUsageAcquiredCallback mStorageUsageAcquiredCallback; + Dali::WebEngineContext::WebEngineFormPasswordAcquiredCallback mFormPasswordAcquiredCallback; + Dali::WebEngineContext::WebEngineDownloadStartedCallback mDownloadStartedCallback; + Dali::WebEngineContext::WebEngineMimeOverriddenCallback mMimeOverriddenCallback; + Dali::WebEngineContext::WebEngineRequestInterceptedCallback mRequestInterceptedCallback; private: Dali::WebEngineContext::CacheModel mockModel; @@ -611,25 +622,55 @@ public: return "http://test.html"; } + Dali::Property::Map GetHeaders() const override + { + return mockHeadersMap; + } + + std::string GetMethod() const override + { + return "GET"; + } + bool Ignore() override { return true; } - bool SetResponseStatus(int statusCode, const std::string &customedStatusText) override + bool SetResponseStatus(int statusCode, const std::string& customedStatusText) override + { + return true; + } + + bool AddResponseHeader(const std::string& fieldName, const std::string& fieldValue) override { + mockHeadersMap.Add(fieldName, fieldValue); return true; } - bool AddResponseHeader(const std::string &fieldName, const std::string &fieldValue) override + bool AddResponseHeaders(const Dali::Property::Map& headers) override { + mockHeadersMap.Merge(headers); return true; } - bool AddResponseBody(const std::string &body, uint32_t length) override + bool AddResponseBody(const std::string& body, uint32_t length) override { return true; } + + bool AddResponse(const std::string& headers, const std::string& body, uint32_t length) override + { + return true; + } + + bool WriteResponseChunk(const std::string& chunk, uint32_t length) override + { + return true; + } + +private: + Dali::Property::Map mockHeadersMap; }; class MockWebEngineConsoleMessage : public Dali::WebEngineConsoleMessage @@ -835,7 +876,7 @@ public: return "test"; } - Dali::Property::Map& GetAttributes() const override + Dali::Property::Map GetAttributes() const override { return mockAttributesMap; } @@ -1493,11 +1534,6 @@ public: mFormRepostDecidedCallback = callback; } - void RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback) - { - mRequestInterceptorCallback = callback; - } - void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) { mConsoleMessageCallback = callback; @@ -1572,7 +1608,6 @@ public: Dali::WebEnginePlugin::WebEngineUrlChangedCallback mUrlChangedCallback; Dali::WebEnginePlugin::WebEngineFormRepostDecidedCallback mFormRepostDecidedCallback; Dali::WebEnginePlugin::WebEngineFrameRenderedCallback mFrameRenderedCallback; - Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback mRequestInterceptorCallback; Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback mConsoleMessageCallback; Dali::WebEnginePlugin::WebEngineResponsePolicyDecidedCallback mResponsePolicyDecisionCallback; Dali::WebEnginePlugin::WebEngineCertificateCallback mCertificateConfirmCallback; @@ -1659,11 +1694,6 @@ bool OnLoadUrl() { gInstance->mFrameRenderedCallback(); } - if (gInstance->mRequestInterceptorCallback) - { - std::unique_ptr interceptor(new MockWebEngineRequestInterceptor()); - gInstance->mRequestInterceptorCallback(std::move(interceptor)); - } if (gInstance->mConsoleMessageCallback) { std::unique_ptr message(new MockWebEngineConsoleMessage()); @@ -1879,6 +1909,17 @@ bool OnMimeOverridden() return false; } +bool OnRequestIntercepted() +{ + DisconnectFromGlobalSignal(&OnRequestIntercepted); + if (gWebEngineContextInstance) + { + Dali::WebEngineRequestInterceptorPtr interceptor = new MockWebEngineRequestInterceptor(); + gWebEngineContextInstance->mRequestInterceptedCallback(interceptor); + } + return false; +} + bool OnChangesWatch() { DisconnectFromGlobalSignal( &OnChangesWatch ); @@ -2373,11 +2414,6 @@ void WebEngine::RegisterFormRepostDecidedCallback(Dali::WebEnginePlugin::WebEngi Internal::Adaptor::GetImplementation( *this ).RegisterFormRepostDecidedCallback(callback); } -void WebEngine::RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback) -{ - Internal::Adaptor::GetImplementation( *this ).RegisterRequestInterceptorCallback(callback); -} - void WebEngine::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) { Internal::Adaptor::GetImplementation( *this ).RegisterConsoleMessageReceivedCallback(callback); diff --git a/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp index 16518da..4e553e8 100755 --- a/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-WebView.cpp @@ -77,8 +77,6 @@ static bool gWheelEventHandled = false; static int gFormRepostDecidedCallbackCalled = 0; static std::unique_ptr gFormRepostDecidedInstance = nullptr; static int gFrameRenderedCallbackCalled = 0; -static int gRequestInterceptorCallbackCalled = 0; -static std::unique_ptr gRequestInterceptorInstance = nullptr; static int gConsoleMessageCallbackCalled = 0; static std::unique_ptr gConsoleMessageInstance = nullptr; static int gResponsePolicyDecidedCallbackCalled = 0; @@ -94,6 +92,8 @@ static int gStorageUsageAcquiredCallbackCalled = 0; static int gFormPasswordsAcquiredCallbackCalled = 0; static int gDownloadStartedCallbackCalled = 0; static int gMimeOverriddenCallbackCalled = 0; +static int gRequestInterceptedCallbackCalled = 0; +static Dali::WebEngineRequestInterceptorPtr gRequestInterceptorInstance = nullptr; static std::vector> gSecurityOriginList; static std::vector> gPasswordDataList; static int gContextMenuShownCallbackCalled = 0; @@ -240,12 +240,6 @@ static void OnFrameRendered() gFrameRenderedCallbackCalled++; } -static void OnRequestInterceptor(std::unique_ptr interceptor) -{ - gRequestInterceptorCallbackCalled++; - gRequestInterceptorInstance = std::move(interceptor); -} - static void OnConsoleMessage(std::unique_ptr message) { gConsoleMessageCallbackCalled++; @@ -300,6 +294,13 @@ static bool OnMimeOverridden(const std::string&, const std::string&, std::string return false; } +static bool OnRequestIntercepted(Dali::WebEngineRequestInterceptorPtr interceptor) +{ + gRequestInterceptedCallbackCalled++; + gRequestInterceptorInstance = interceptor; + return false; +} + static void OnContextMenuShown(std::unique_ptr menu) { gContextMenuShownCallbackCalled++; @@ -1231,36 +1232,6 @@ int UtcDaliWebViewVideoPlayingGeolocationPermission(void) END_TEST; } -int UtcDaliWebViewHttpRequestInterceptor(void) -{ - ToolkitTestApplication application; - - WebView view = WebView::New(); - DALI_TEST_CHECK( view ); - - // load url. - view.RegisterRequestInterceptorCallback( &OnRequestInterceptor ); - DALI_TEST_EQUALS( gRequestInterceptorCallbackCalled, 0, TEST_LOCATION ); - DALI_TEST_CHECK(gRequestInterceptorInstance == 0); - - view.LoadUrl( TEST_URL1 ); - Test::EmitGlobalTimerSignal(); - DALI_TEST_EQUALS( gRequestInterceptorCallbackCalled, 1, TEST_LOCATION ); - - // check request interceptor. - DALI_TEST_CHECK(gRequestInterceptorInstance != 0); - DALI_TEST_CHECK(gRequestInterceptorInstance->Ignore()); - DALI_TEST_CHECK(gRequestInterceptorInstance->SetResponseStatus(400, "error")); - DALI_TEST_CHECK(gRequestInterceptorInstance->AddResponseHeader("key", "value")); - DALI_TEST_CHECK(gRequestInterceptorInstance->AddResponseBody("test", 4)); - std::string testUrl("http://test.html"); - DALI_TEST_EQUALS(gRequestInterceptorInstance->GetUrl(), testUrl, TEST_LOCATION); - - gRequestInterceptorInstance = nullptr; - - END_TEST; -} - int UtcDaliWebViewResponsePolicyDecisionRequest(void) { ToolkitTestApplication application; @@ -1334,8 +1305,8 @@ int UtcDaliWebViewHitTest(void) DALI_TEST_EQUALS(hitTest->GetTagName(), testTagName, TEST_LOCATION); std::string testNodeValue("test"); DALI_TEST_EQUALS(hitTest->GetNodeValue(), testNodeValue, TEST_LOCATION); - Dali::Property::Map* testMap = &hitTest->GetAttributes(); - DALI_TEST_CHECK(testMap); + Dali::Property::Map testMap = hitTest->GetAttributes(); + DALI_TEST_EQUALS(testMap.Count(), 0, TEST_LOCATION); std::string testImageFileNameExtension("jpg"); DALI_TEST_EQUALS(hitTest->GetImageFileNameExtension(), testImageFileNameExtension, TEST_LOCATION); Dali::PixelData testImageBuffer = hitTest->GetImageBuffer(); @@ -1668,6 +1639,47 @@ int UtcDaliWebContextGetWebDatabaseStorageOrigins(void) END_TEST; } +int UtcDaliWebContextHttpRequestInterceptor(void) +{ + ToolkitTestApplication application; + + WebView view = WebView::New(); + DALI_TEST_CHECK( view ); + + Dali::Toolkit::WebContext* context = view.GetContext(); + DALI_TEST_CHECK( context != 0 ) + + // load url. + context->RegisterRequestInterceptedCallback(&OnRequestIntercepted); + DALI_TEST_EQUALS(gRequestInterceptedCallbackCalled, 0, TEST_LOCATION); + DALI_TEST_CHECK(gRequestInterceptorInstance == 0); + + Test::EmitGlobalTimerSignal(); + DALI_TEST_EQUALS( gRequestInterceptedCallbackCalled, 1, TEST_LOCATION ); + + // check request interceptor. + DALI_TEST_CHECK(gRequestInterceptorInstance != 0); + DALI_TEST_CHECK(gRequestInterceptorInstance->Ignore()); + DALI_TEST_CHECK(gRequestInterceptorInstance->SetResponseStatus(400, "error")); + DALI_TEST_CHECK(gRequestInterceptorInstance->AddResponseHeader("key1", "value1")); + Dali::Property::Map testHeaders; + testHeaders.Insert("key2", "value2"); + DALI_TEST_CHECK(gRequestInterceptorInstance->AddResponseHeaders(testHeaders)); + DALI_TEST_CHECK(gRequestInterceptorInstance->AddResponseBody("test", 4)); + DALI_TEST_CHECK(gRequestInterceptorInstance->AddResponse("key:value", "test", 4)); + DALI_TEST_CHECK(gRequestInterceptorInstance->WriteResponseChunk("test", 4)); + std::string testUrl("http://test.html"); + DALI_TEST_EQUALS(gRequestInterceptorInstance->GetUrl(), testUrl, TEST_LOCATION); + std::string testMethod("GET"); + DALI_TEST_EQUALS(gRequestInterceptorInstance->GetMethod(), testMethod, TEST_LOCATION); + Dali::Property::Map resultHeaders = gRequestInterceptorInstance->GetHeaders(); + DALI_TEST_EQUALS(resultHeaders.Count(), 2, TEST_LOCATION); + + gRequestInterceptorInstance = nullptr; + + END_TEST; +} + // test cases for web cookie manager. int UtcDaliWebCookieManagerGetSetCookieAcceptPolicy(void) diff --git a/dali-toolkit/devel-api/controls/web-view/web-context.cpp b/dali-toolkit/devel-api/controls/web-view/web-context.cpp index 12218f7..bba91c6 100755 --- a/dali-toolkit/devel-api/controls/web-view/web-context.cpp +++ b/dali-toolkit/devel-api/controls/web-view/web-context.cpp @@ -144,6 +144,11 @@ void WebContext::RegisterMimeOverriddenCallback(Dali::WebEngineContext::WebEngin mWebEngineContext.RegisterMimeOverriddenCallback(callback); } +void WebContext::RegisterRequestInterceptedCallback(Dali::WebEngineContext::WebEngineRequestInterceptedCallback callback) +{ + mWebEngineContext.RegisterRequestInterceptedCallback(callback); +} + void WebContext::EnableCache(bool cacheEnabled) { mWebEngineContext.EnableCache(cacheEnabled); diff --git a/dali-toolkit/devel-api/controls/web-view/web-context.h b/dali-toolkit/devel-api/controls/web-view/web-context.h index 56bf2d8..69e723b 100755 --- a/dali-toolkit/devel-api/controls/web-view/web-context.h +++ b/dali-toolkit/devel-api/controls/web-view/web-context.h @@ -229,6 +229,13 @@ public: void RegisterMimeOverriddenCallback(Dali::WebEngineContext::WebEngineMimeOverriddenCallback callback); /** + * @brief Callback to be called when http request need be intercepted. + * + * @param[in] callback + */ + void RegisterRequestInterceptedCallback(Dali::WebEngineContext::WebEngineRequestInterceptedCallback callback); + + /** * @brief Toggle the cache to be enabled or disabled * * @param[in] cacheEnabled enable or disable cache diff --git a/dali-toolkit/devel-api/controls/web-view/web-view.cpp b/dali-toolkit/devel-api/controls/web-view/web-view.cpp index 7fff902..8412273 100755 --- a/dali-toolkit/devel-api/controls/web-view/web-view.cpp +++ b/dali-toolkit/devel-api/controls/web-view/web-view.cpp @@ -354,11 +354,6 @@ void WebView::RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFram Dali::Toolkit::GetImpl(*this).RegisterFrameRenderedCallback(callback); } -void WebView::RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback) -{ - Dali::Toolkit::GetImpl(*this).RegisterRequestInterceptorCallback(callback); -} - void WebView::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) { Dali::Toolkit::GetImpl(*this).RegisterConsoleMessageReceivedCallback(callback); diff --git a/dali-toolkit/devel-api/controls/web-view/web-view.h b/dali-toolkit/devel-api/controls/web-view/web-view.h index fa8cee3..6b373df 100755 --- a/dali-toolkit/devel-api/controls/web-view/web-view.h +++ b/dali-toolkit/devel-api/controls/web-view/web-view.h @@ -678,13 +678,6 @@ public: void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback); /** - * @brief Callback to be called when http request need be intercepted. - * - * @param[in] callback - */ - void RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback); - - /** * @brief Callback to be called when console message will be logged. * * @param[in] callback diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp old mode 100644 new mode 100755 index e336f2c..77b29ca --- a/dali-toolkit/internal/controls/web-view/web-view-impl.cpp +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -702,14 +701,6 @@ void WebView::RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFram mFrameRenderedCallback = callback; } -void WebView::RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback) -{ - if(mWebEngine) - { - mWebEngine.RegisterRequestInterceptorCallback(callback); - } -} - void WebView::RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback) { if(mWebEngine) diff --git a/dali-toolkit/internal/controls/web-view/web-view-impl.h b/dali-toolkit/internal/controls/web-view/web-view-impl.h index 15f3ce3..ca1ec27 100755 --- a/dali-toolkit/internal/controls/web-view/web-view-impl.h +++ b/dali-toolkit/internal/controls/web-view/web-view-impl.h @@ -353,11 +353,6 @@ public: void RegisterFrameRenderedCallback(Dali::WebEnginePlugin::WebEngineFrameRenderedCallback callback); /** - * @copydoc Dali::Toolkit::WebView::RegisterRequestInterceptorCallback() - */ - void RegisterRequestInterceptorCallback(Dali::WebEnginePlugin::WebEngineRequestInterceptorCallback callback); - - /** * @copydoc Dali::Toolkit::WebView::RegisterConsoleMessageReceivedCallback() */ void RegisterConsoleMessageReceivedCallback(Dali::WebEnginePlugin::WebEngineConsoleMessageReceivedCallback callback); -- 2.7.4