1// Copyright 2019 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#import "ios/chrome/browser/ui/webui/translate_internals/translate_internals_ui.h"
6
7#include <string>
8
9#import "components/translate/translate_internals/translate_internals_handler.h"
10#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
11#include "ios/chrome/browser/chrome_url_constants.h"
12#import "ios/chrome/browser/ui/webui/translate_internals/ios_translate_internals_handler.h"
13#include "ios/chrome/grit/ios_resources.h"
14#include "ios/web/public/webui/web_ui_ios.h"
15#include "ios/web/public/webui/web_ui_ios_data_source.h"
16
17#if !defined(__has_feature) || !__has_feature(objc_arc)
18#error "This file requires ARC support."
19#endif
20
21namespace {
22
23// Creates a WebUI data source for chrome://translate-internals page.
24// Changes to this should be in sync with its non-iOS equivalent
25// chrome/browser/ui/webui/translate_internals/translate_internals_ui.cc
26web::WebUIIOSDataSource* CreateTranslateInternalsHTMLSource() {
27  web::WebUIIOSDataSource* source =
28      web::WebUIIOSDataSource::Create(kChromeUITranslateInternalsHost);
29
30  source->SetDefaultResource(IDR_IOS_TRANSLATE_INTERNALS_HTML);
31  source->UseStringsJs();
32  source->AddResourcePath("translate_internals.js",
33                          IDR_IOS_TRANSLATE_INTERNALS_JS);
34
35  base::DictionaryValue langs;
36  translate::TranslateInternalsHandler::GetLanguages(&langs);
37  for (base::DictionaryValue::Iterator it(langs); !it.IsAtEnd(); it.Advance()) {
38    std::string key = "language-" + it.key();
39    std::string value;
40    it.value().GetAsString(&value);
41    source->AddString(key, value);
42  }
43
44  source->AddString("cld-version", "3");
45
46  return source;
47}
48
49}  // namespace
50
51TranslateInternalsUI::TranslateInternalsUI(web::WebUIIOS* web_ui,
52                                           const std::string& host)
53    : web::WebUIIOSController(web_ui, host) {
54  web_ui->AddMessageHandler(std::make_unique<IOSTranslateInternalsHandler>());
55  web::WebUIIOSDataSource::Add(ChromeBrowserState::FromWebUIIOS(web_ui),
56                               CreateTranslateInternalsHTMLSource());
57}
58
59TranslateInternalsUI::~TranslateInternalsUI() {}
60