From 8fd4db7e3dc511d45a662f7222fec34edf569541 Mon Sep 17 00:00:00 2001 From: Gajendra N Date: Fri, 6 Nov 2020 18:58:52 +0530 Subject: [PATCH] [M85 Migration] Support PrepareErrorPage 1)When if an app is faced to show an error page (i.e. CORS deny), This supports error markup page. 2)Adding new files is used for common layer for EWK/WRTjs CommonRenderClient class can be extended as common layer for both References: https://review.tizen.org/gerrit/233022 https://review.tizen.org/gerrit/233228 Change-Id: Ia3e44f2dab3564846e1291ba1c61ab3502924890 Signed-off-by: Gajendra N --- .../content/renderer/common_renderer_client.cc | 122 +++++++++++++++++++++ .../content/renderer/common_renderer_client.h | 24 ++++ .../content/renderer/renderer_efl.gni | 5 +- .../renderer/content_renderer_client_efl.cc | 65 +---------- .../renderer/content_renderer_client_efl.h | 12 +- .../renderer/render_frame_observer_efl.cc | 18 +-- 6 files changed, 168 insertions(+), 78 deletions(-) create mode 100644 tizen_src/chromium_impl/content/renderer/common_renderer_client.cc create mode 100644 tizen_src/chromium_impl/content/renderer/common_renderer_client.h diff --git a/tizen_src/chromium_impl/content/renderer/common_renderer_client.cc b/tizen_src/chromium_impl/content/renderer/common_renderer_client.cc new file mode 100644 index 0000000..1248411 --- /dev/null +++ b/tizen_src/chromium_impl/content/renderer/common_renderer_client.cc @@ -0,0 +1,122 @@ +// Copyright 2019 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "common_renderer_client.h" + +#include + +#include "base/strings/stringprintf.h" +#include "base/strings/string_number_conversions.h" +#include "net/base/net_errors.h" +#include "third_party/blink/public/platform/web_url_error.h" + +#if defined(OS_TIZEN_TV_PRODUCT) +#include "url/gurl.h" +#endif + +namespace content { + +namespace { + +const char* GetErrorTag(int error) { + // The list of error reason mappings can be found in + // net/base/net_error_list.h + if ((error <= net::ERR_DNS_MALFORMED_RESPONSE && + error >= net::ERR_DNS_SORT_ERROR) || + error == net::ERR_NAME_RESOLUTION_FAILED || + error == net::ERR_NAME_NOT_RESOLVED) { + return "IDS_WEBVIEW_BODY_THE_SERVER_AT_PS_CANT_BE_FOUND_BECAUSE_THE_DNS_" + "LOOK_UP_FAILED_MSG"; + } + + if (error <= net::ERR_INTERNET_DISCONNECTED && + error >= net::ERR_SSL_HANDSHAKE_NOT_COMPLETED) { + return "IDS_WEBVIEW_BODY_UNABLE_TO_LOAD_THE_PAGE_PS_TOOK_TOO_LONG_TO_" + "RESPOND_THE_WEBSITE_MAY_BE_DOWN_OR_THERE_MAY_HAVE_BEEN_A_NETWORK_" + "CONNECTION_ERROR"; + } + + if (error <= net::ERR_ICANN_NAME_COLLISION && error >= net::ERR_CERT_END) { + // net::ERR_SSL_INAPPROPRIATE_FALLBACK was removed by [1] in upstream. + // So, we change from to net::ERR_ICANN_NAME_COLLISION. + // [1] https://codereview.chromium.org/2382983002 + return "IDS_WEBVIEW_BODY_UNABLE_TO_LOAD_THE_PAGE_A_SECURE_CONNECTION_" + "COULD_NOT_BE_MADE_TO_PS_THE_MOST_LIKELY_CAUSE_IS_THE_DEVICES_" + "CLOCK_CHECK_THAT_THE_TIME_ON_YOUR_DEVICE_IS_CORRECT_AND_REFRESH_" + "THE_PAGE"; + } + return "IDS_WEBVIEW_BODY_UNABLE_TO_LOAD_THE_PAGE_PS_MAY_BE_TEMPORARILY_" + "DOWN_OR_HAVE_MOVED_TO_A_NEW_URL"; +} + +} + +void CommonRendererClient::PrepareErrorPage( + const blink::WebURLError& error, + std::string* error_html) { + if (error_html) { //LCOV_EXCL_LINE + /* LCOV_EXCL_START */ + std::string error_head = std::string( + dgettext("WebKit", "IDS_WEBVIEW_HEADER_THIS_WEBPAGE_IS_NOT_AVAILABLE")); + std::string error_message = + std::string(dgettext("WebKit", GetErrorTag(error.reason()))); + std::string error_code = "ErrorCode: " + base::NumberToString(error.reason()) + + " (" + net::ErrorToString(error.reason()) + ")"; +#if defined(OS_TIZEN_TV_PRODUCT) + // Only host of the unreachable url is reported on tv. + GURL gurl(error.url()); + error_message = + base::StringPrintf(error_message.c_str(), gurl.host().c_str()); +#else + error_message = base::StringPrintf(error_message.c_str(), + error.url().GetString().Ascii().c_str()); +#endif + *error_html = + "" + "" + "" + "" + ""; + *error_html += error.url().GetString().Utf8(); + *error_html += + "" + "" + "" + "" + "
" + "

"; + *error_html += error_head; + *error_html += "


"; + *error_html += error_code; + *error_html += "
"; + *error_html += error_message; + *error_html += + "
" + "" + ""; + /* LCOV_EXCL_STOP */ + } // LCOV_EXCL_LINE +} + +} // namespace content diff --git a/tizen_src/chromium_impl/content/renderer/common_renderer_client.h b/tizen_src/chromium_impl/content/renderer/common_renderer_client.h new file mode 100644 index 0000000..09dc268 --- /dev/null +++ b/tizen_src/chromium_impl/content/renderer/common_renderer_client.h @@ -0,0 +1,24 @@ +// Copyright 2019 Samsung Electronics. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMMON_RENDERER_CLIENT_H_ +#define COMMON_RENDERER_CLIENT_H_ + +#include + +namespace blink { +class WebURLError; +} + +namespace content { + +// This class will be used for common layer of RenderClient +class CommonRendererClient { + public: + static void PrepareErrorPage(const blink::WebURLError& error, std::string* error_html); +}; + +} // namespace content + +#endif // COMMON_RENDERER_CLIENT_H_ \ No newline at end of file diff --git a/tizen_src/chromium_impl/content/renderer/renderer_efl.gni b/tizen_src/chromium_impl/content/renderer/renderer_efl.gni index 6d9c075..9911a1a 100644 --- a/tizen_src/chromium_impl/content/renderer/renderer_efl.gni +++ b/tizen_src/chromium_impl/content/renderer/renderer_efl.gni @@ -29,7 +29,10 @@ external_content_renderer_efl_deps = [] ############################################################################## # Source ############################################################################## -external_content_renderer_efl_sources = [] +external_content_renderer_efl_sources = [ + "//tizen_src/chromium_impl/content/renderer/common_renderer_client.cc", + "//tizen_src/chromium_impl/content/renderer/common_renderer_client.h", +] if (!ewk_bringup) { #FIXME:m85 bringup if (is_tizen) { diff --git a/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.cc b/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.cc index 106f19a..7643b96 100644 --- a/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.cc +++ b/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.cc @@ -18,6 +18,7 @@ #include "content/public/renderer/content_renderer_client.h" #include "content/public/renderer/render_thread.h" #include "content/public/renderer/render_view.h" +#include "content/renderer/common_renderer_client.h" #include "content/renderer/loader/request_extra_data.h" #include "content/renderer/render_view_impl.h" #include "renderer/content_settings_client_efl.h" @@ -26,7 +27,6 @@ #include "renderer/render_frame_observer_efl.h" #include "renderer/render_view_observer_efl.h" #include "third_party/blink/public/platform/url_conversion.h" -#include "third_party/blink/public/platform/web_url_error.h" #include "third_party/blink/public/platform/web_url_request.h" #include "third_party/blink/public/platform/web_viewport_style.h" #include "third_party/blink/public/web/web_document.h" @@ -260,68 +260,13 @@ bool ContentRendererClientEfl::IsLinkVisited(uint64_t link_hash) { return visited_link_reader_->IsVisited(link_hash); } -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup -void ContentRendererClientEfl::GetNavigationErrorStrings( +void ContentRendererClientEfl::PrepareErrorPage( content::RenderFrame* render_frame, - const blink::WebURLRequest& failed_request, const blink::WebURLError& error, - std::string* error_html, - base::string16* error_description) { - if (error_html) { - - std::string errorHead = std::string(dgettext( - "WebKit", "IDS_WEBVIEW_HEADER_THIS_WEBPAGE_IS_NOT_AVAILABLE")); - std::string errorMessage = std::string(dgettext( - "WebKit", - "IDS_WEBVIEW_BODY_THE_SERVER_AT_PS_CANT_BE_FOUND_BECAUSE_THE_DNS_LOOK_UP_FAILED_MSG")); - errorMessage = base::StringPrintf( - errorMessage.c_str(), error.unreachable_url.GetString().Ascii()); - - *error_html = - "" - "" - "" - "" - ""; - *error_html += error.unreachable_url.GetString().Utf8(); - *error_html += - "" - "" - "" - "" - "
" - "

"; - *error_html += errorHead; - *error_html += "


"; - *error_html += errorMessage; - *error_html += - "
" - "" - "" - ; - } + const std::string& http_method, + std::string* error_html) { + content::CommonRendererClient::PrepareErrorPage(error, error_html); } -#endif void ContentRendererClientEfl::ApplyCustomMobileSettings(blink::WebView* webview) { // blink::WebViewImpl prevents auto zoom after tap if maximum legible scale is diff --git a/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.h b/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.h index 8e0c0fe..103f1f5 100644 --- a/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.h +++ b/tizen_src/ewk/efl_integration/renderer/content_renderer_client_efl.h @@ -81,14 +81,10 @@ class ContentRendererClientEfl : public content::ContentRendererClient { blink::WebFrame* frame, v8::Handle, int world_id); -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup - void GetNavigationErrorStrings( - content::RenderFrame* render_frame, - const blink::WebURLRequest& failed_request, - const blink::WebURLError& error, - std::string* error_html, - base::string16* error_description) override; -#endif + void PrepareErrorPage(content::RenderFrame* render_frame, + const blink::WebURLError& error, + const std::string& http_method, + std::string* error_html) override; uint64_t VisitedLinkHash(const char* canonical_url, size_t length) override; diff --git a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc index 3d385b7..0bbe072 100644 --- a/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc +++ b/tizen_src/ewk/efl_integration/renderer/render_frame_observer_efl.cc @@ -19,6 +19,7 @@ #include "content/renderer/render_frame_impl.h" #undef private #include "common/render_messages_ewk.h" +#include "net/url_request/url_request_status.h" #include "renderer/content_renderer_client_efl.h" #include "third_party/blink/public/platform/url_conversion.h" #include "third_party/blink/public/platform/web_url_error.h" @@ -108,20 +109,19 @@ void RenderFrameObserverEfl::OnSelectPopupMenuItems( } void RenderFrameObserverEfl::OnLoadNotFoundErrorPage(std::string errorUrl) { -#if !defined(EWK_BRINGUP) // FIXME: m67 bringup blink::WebLocalFrame* frame = render_frame()->GetWebFrame(); - blink::WebURLError error; - error.unreachable_url = GURL(errorUrl); - blink::WebURLRequest failed_request(error.unreachable_url); + blink::WebURL web_url = blink::WebURL(GURL(errorUrl)); + blink::WebURLError error(net::URLRequestStatus::FAILED, web_url); + blink::WebURLRequest failed_request(web_url); bool replace = true; std::string error_html; - GetContentClientExport()->renderer()->GetNavigationErrorStrings( - render_frame(), failed_request, error, &error_html, NULL); - frame->LoadHTMLString(error_html, GURL(kUnreachableWebDataURL), - error.unreachable_url, replace); -#endif + GetContentClientExport()->renderer()->PrepareErrorPage( + render_frame(), error, failed_request.HttpMethod().Ascii(), &error_html); + + render_frame()->LoadHTMLString(error_html, GURL(kUnreachableWebDataURL), "UTF-8", + web_url, replace); } void RenderFrameObserverEfl::OnMoveToNextOrPreviousSelectElement(bool direction) { -- 2.7.4