blob: bf8560cbd6bd3cf0acf4f4b31a7b1ab391b68070 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "components/translate/ios/browser/translate_java_script_feature.h"
#import "components/translate/ios/browser/translate_controller.h"
#import "ios/web/public/js_messaging/script_message.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
constexpr char kScriptMessageName[] = "TranslateMessage";
} // namespace
namespace translate {
// static
TranslateJavaScriptFeature* TranslateJavaScriptFeature::GetInstance() {
static base::NoDestructor<TranslateJavaScriptFeature> instance;
return instance.get();
}
TranslateJavaScriptFeature::TranslateJavaScriptFeature()
: web::JavaScriptFeature(
web::ContentWorld::kPageContentWorld,
{/* The `translate_ios` script is injected on demand */
/* by JSTranslateWebFrameManager. */}) {}
TranslateJavaScriptFeature::~TranslateJavaScriptFeature() = default;
absl::optional<std::string>
TranslateJavaScriptFeature::GetScriptMessageHandlerName() const {
return kScriptMessageName;
}
void TranslateJavaScriptFeature::ScriptMessageReceived(
web::WebState* web_state,
const web::ScriptMessage& message) {
if (!message.is_main_frame() || !message.body() ||
!message.body()->is_dict()) {
return;
}
TranslateController* translate_controller =
TranslateController::FromWebState(web_state);
translate_controller->OnJavascriptCommandReceived(message.body()->GetDict());
}
} // namespace translate