From 16c79cd375bfcb96664cc70f0831ac8b392f007e Mon Sep 17 00:00:00 2001 From: Mikhail Atuchin Date: Mon, 11 Oct 2021 14:32:11 +0700 Subject: [PATCH] Change translate-security-origin --- app/brave_main_delegate.cc | 2 +- browser/brave_browser_main_parts.cc | 20 ++++++++++++++ ...static_redirect_network_delegate_helper.cc | 4 +-- ...nslate_redirect_network_delegate_helper.cc | 21 ++++++++++++--- browser/ui/views/frame/brave_browser_view.cc | 19 +++++-------- .../core/browser/brave_translate_features.cc | 27 ++++++++++++++++--- .../core/browser/brave_translate_features.h | 13 +++++++++ 7 files changed, 84 insertions(+), 22 deletions(-) diff --git a/app/brave_main_delegate.cc b/app/brave_main_delegate.cc index 9f09f014bcbc4..2fdee2d010873 100644 --- a/app/brave_main_delegate.cc +++ b/app/brave_main_delegate.cc @@ -225,7 +225,7 @@ bool BraveMainDelegate::BasicStartupComplete(int* exit_code) { features::kWinrtGeolocationImplementation.name, #endif security_state::features::kSafetyTipUI.name, - }; +}; // Disabled features. std::unordered_set disabled_features = { diff --git a/browser/brave_browser_main_parts.cc b/browser/brave_browser_main_parts.cc index 6938ecb90e8f4..10bd44f1363a5 100644 --- a/browser/brave_browser_main_parts.cc +++ b/browser/brave_browser_main_parts.cc @@ -15,9 +15,11 @@ #include "brave/components/brave_sync/features.h" #include "brave/components/speedreader/buildflags.h" #include "brave/components/tor/buildflags/buildflags.h" +#include "brave/components/translate/core/browser/brave_translate_features.h" #include "chrome/common/chrome_features.h" #include "components/prefs/pref_service.h" #include "components/sync/driver/sync_driver_switches.h" +#include "components/translate/core/common/translate_switches.h" #include "content/public/browser/render_frame_host.h" #include "extensions/buildflags/buildflags.h" #include "media/base/media_switches.h" @@ -64,6 +66,12 @@ #include "extensions/browser/extension_system.h" #endif +namespace { +const char kBraveTranslateOriginURL[] = "https://translate-relay.brave.com"; +const char kBraveTranslateScriptURL[] = + "https://translate-relay.brave.com/translate_a/element.js"; +} // namespace + void BraveBrowserMainParts::PreBrowserStart() { #if BUILDFLAG(ENABLE_SPEEDREADER) // Register() must be called after the SerializedNavigationDriver is @@ -164,6 +172,18 @@ void BraveBrowserMainParts::PreProfileInit() { command_line->RemoveSwitch(switches::kDisableSync); } #endif + + // If enable then redirect the most of translate requests to the Brave + // endpoints. The rest will be redirected in + // OnBeforeURLRequest_TranslateRedirectWork(). + if (translate::ShouldUseTranslateSwitches()) { + command_line->AppendSwitchASCII( + translate::switches::kTranslateSecurityOrigin, + kBraveTranslateOriginURL); + command_line->AppendSwitchASCII( + translate::switches::kTranslateScriptURL, + kBraveTranslateScriptURL); + } } void BraveBrowserMainParts::PostProfileInit() { diff --git a/browser/net/brave_static_redirect_network_delegate_helper.cc b/browser/net/brave_static_redirect_network_delegate_helper.cc index c30a9c273ca90..826f65daf48c7 100644 --- a/browser/net/brave_static_redirect_network_delegate_helper.cc +++ b/browser/net/brave_static_redirect_network_delegate_helper.cc @@ -187,12 +187,10 @@ int OnBeforeURLRequest_StaticRedirectWorkForGURL( if (translate_language_pattern.MatchesURL(request_url)) { *new_url = GURL(kBraveTranslateLanguageEndpoint); - return translate::IsBraveTranslateGoAvailable() ? net::OK - : net::ERR_ABORTED; + return translate::ShouldUpdateTranslateList() ? net::OK : net::ERR_ABORTED; } return net::OK; } - } // namespace brave diff --git a/browser/net/brave_translate_redirect_network_delegate_helper.cc b/browser/net/brave_translate_redirect_network_delegate_helper.cc index a1816f187f1de..3b78f595eef25 100644 --- a/browser/net/brave_translate_redirect_network_delegate_helper.cc +++ b/browser/net/brave_translate_redirect_network_delegate_helper.cc @@ -67,9 +67,24 @@ int OnBeforeURLRequest_TranslateRedirectWork( std::shared_ptr ctx) { GURL::Replacements replacements; - // TODO(atuchin): temporary hack to not break translate extension. - // |initiator_url| is not more related to script url. - if (ctx->initiator_url.scheme_piece() != "https") { + if (translate::DisableTranslateLibraryNetworkRedirects()) + return net::OK; + + // Skip extensions/service-worker/etc requests. + if (!ctx->initiator_url.SchemeIsHTTPOrHTTPS()) + return net::OK; + + const static std::string kTranslateInitiatorHost( + GURL(kTranslateInitiatorURL).host()); + const static std::string kTranslateGen204PatternHost( + GURL(kTranslateGen204Pattern).host()); + const static std::string kTranslateBrandingPngHost( + GURL(kTranslateBrandingPNGPattern).host()); + + // Fast way to exclude any unrelated requests. + if (ctx->request_url.host_piece() != kTranslateInitiatorHost || + ctx->request_url.host_piece() != kTranslateGen204PatternHost || + ctx->request_url.host_piece() != kTranslateBrandingPngHost) { return net::OK; } diff --git a/browser/ui/views/frame/brave_browser_view.cc b/browser/ui/views/frame/brave_browser_view.cc index 9bd609c062a44..7c08b76f04e37 100644 --- a/browser/ui/views/frame/brave_browser_view.cc +++ b/browser/ui/views/frame/brave_browser_view.cc @@ -270,22 +270,17 @@ ShowTranslateBubbleResult BraveBrowserView::ShowTranslateBubble( const std::string& target_language, translate::TranslateErrors::Type error_type, bool is_user_gesture) { -#if BUILDFLAG(ENABLE_BRAVE_TRANSLATE_EXTENSION) - if (!translate::TranslateExtensionIsEnabled(GetProfile()) && - translate::ShouldOfferExtensionInstation(GetProfile())) { - return BrowserView::ShowTranslateBubble(web_contents, step, source_language, - target_language, error_type, - is_user_gesture); - } -#endif // BUILDFLAG(ENABLE_BRAVE_TRANSLATE_EXTENSION) - -#if BUILDFLAG(ENABLE_BRAVE_TRANSLATE_GO) - if (translate::InternalTranslationIsEnabled(GetProfile())) { +#if BUILDFLAG(ENABLE_BRAVE_TRANSLATE_EXTENSION) || \ + BUILDFLAG(ENABLE_BRAVE_TRANSLATE_GO) + if ((!translate::TranslateExtensionIsEnabled(GetProfile()) && + translate::ShouldOfferExtensionInstation(GetProfile())) || + translate::InternalTranslationIsEnabled(GetProfile())) { return BrowserView::ShowTranslateBubble(web_contents, step, source_language, target_language, error_type, is_user_gesture); } -#endif // BUILDFLAG(ENABLE_BRAVE_TRANSLATE_GO) +#endif // BUILDFLAG(ENABLE_BRAVE_TRANSLATE_EXTENSION) || + // BUILDFLAG(ENABLE_BRAVE_TRANSLATE_GO) return ShowTranslateBubbleResult::BROWSER_WINDOW_NOT_VALID; } diff --git a/components/translate/core/browser/brave_translate_features.cc b/components/translate/core/browser/brave_translate_features.cc index e0434bd1c0ecd..88c8677b23135 100644 --- a/components/translate/core/browser/brave_translate_features.cc +++ b/components/translate/core/browser/brave_translate_features.cc @@ -10,9 +10,16 @@ namespace translate { namespace features { -const base::Feature kUseBraveTranslateGo { - "UseBraveTranslateGo", base::FeatureState::FEATURE_DISABLED_BY_DEFAULT -}; +const base::Feature kUseBraveTranslateGo{ + "UseBraveTranslateGo", base::FeatureState::FEATURE_DISABLED_BY_DEFAULT}; + +const base::FeatureParam kUpdateLanguageListParam{ + &kUseBraveTranslateGo, "update-languages", false}; +const base::FeatureParam kUseTranslateParam{&kUseBraveTranslateGo, + "use-switches", true}; +const base::FeatureParam kDisableTranslateLibraryNetworkRedirectsParam{ + &kUseBraveTranslateGo, "disable-library-redirects", true}; + } // namespace features bool IsBraveTranslateGoAvailable() { @@ -31,4 +38,18 @@ bool IsTranslateExtensionAvailable() { #endif // BUILDFLAG(ENABLE_BRAVE_TRANSLATE_EXTENSION) } +bool ShouldUseTranslateSwitches() { + return IsBraveTranslateGoAvailable() && features::kUseTranslateParam.Get(); +} + +bool ShouldUpdateTranslateList() { + return IsBraveTranslateGoAvailable() && + features::kUpdateLanguageListParam.Get(); +} + +bool DisableTranslateLibraryNetworkRedirects() { + return !IsBraveTranslateGoAvailable() || + features::kDisableTranslateLibraryNetworkRedirectsParam.Get(); +} + } // namespace translate diff --git a/components/translate/core/browser/brave_translate_features.h b/components/translate/core/browser/brave_translate_features.h index 7b31744834f87..b7de6ac077e06 100644 --- a/components/translate/core/browser/brave_translate_features.h +++ b/components/translate/core/browser/brave_translate_features.h @@ -7,16 +7,29 @@ #define BRAVE_COMPONENTS_TRANSLATE_CORE_BROWSER_BRAVE_TRANSLATE_FEATURES_H_ #include "base/feature_list.h" +#include "base/metrics/field_trial_params.h" namespace translate { namespace features { extern const base::Feature kUseBraveTranslateGo; + +extern const base::FeatureParam kUpdateLanguageListParam; +extern const base::FeatureParam kReplaceSecurityOriginParam; +extern const base::FeatureParam + kDisableTranslateLibraryNetworkRedirectsParam; + } // namespace features bool IsBraveTranslateGoAvailable(); bool IsTranslateExtensionAvailable(); +bool ShouldUseTranslateSwitches(); + +bool ShouldUpdateTranslateList(); + +bool DisableTranslateLibraryNetworkRedirects(); + } // namespace translate #endif // BRAVE_COMPONENTS_TRANSLATE_CORE_BROWSER_BRAVE_TRANSLATE_FEATURES_H_