| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/translate/ios/browser/language_detection_controller.h" | 5 #include "components/translate/ios/browser/language_detection_controller.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 translate_enabled_.Init(prefs::kEnableTranslate, prefs); | 45 translate_enabled_.Init(prefs::kEnableTranslate, prefs); |
| 46 web_state->AddScriptCommandCallback( | 46 web_state->AddScriptCommandCallback( |
| 47 base::Bind(&LanguageDetectionController::OnTextCaptured, | 47 base::Bind(&LanguageDetectionController::OnTextCaptured, |
| 48 base::Unretained(this)), | 48 base::Unretained(this)), |
| 49 kCommandPrefix); | 49 kCommandPrefix); |
| 50 } | 50 } |
| 51 | 51 |
| 52 LanguageDetectionController::~LanguageDetectionController() { | 52 LanguageDetectionController::~LanguageDetectionController() { |
| 53 } | 53 } |
| 54 | 54 |
| 55 LanguageDetectionController::DetectionDetails::DetectionDetails() |
| 56 : is_cld_reliable(false) {} |
| 57 |
| 58 LanguageDetectionController::DetectionDetails::DetectionDetails( |
| 59 const DetectionDetails& other) = default; |
| 60 |
| 61 LanguageDetectionController::DetectionDetails::~DetectionDetails() = default; |
| 62 |
| 55 std::unique_ptr<LanguageDetectionController::CallbackList::Subscription> | 63 std::unique_ptr<LanguageDetectionController::CallbackList::Subscription> |
| 56 LanguageDetectionController::RegisterLanguageDetectionCallback( | 64 LanguageDetectionController::RegisterLanguageDetectionCallback( |
| 57 const Callback& callback) { | 65 const Callback& callback) { |
| 58 return language_detection_callbacks_.Add(callback); | 66 return language_detection_callbacks_.Add(callback); |
| 59 } | 67 } |
| 60 | 68 |
| 61 void LanguageDetectionController::StartLanguageDetection() { | 69 void LanguageDetectionController::StartLanguageDetection() { |
| 62 if (!translate_enabled_.GetValue()) | 70 if (!translate_enabled_.GetValue()) |
| 63 return; // Translate disabled in preferences. | 71 return; // Translate disabled in preferences. |
| 64 DCHECK(web_state()); | 72 DCHECK(web_state()); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 base::Bind(&LanguageDetectionController::OnTextRetrieved, | 116 base::Bind(&LanguageDetectionController::OnTextRetrieved, |
| 109 weak_method_factory_.GetWeakPtr(), | 117 weak_method_factory_.GetWeakPtr(), |
| 110 http_content_language, html_lang)]; | 118 http_content_language, html_lang)]; |
| 111 return true; | 119 return true; |
| 112 } | 120 } |
| 113 | 121 |
| 114 void LanguageDetectionController::OnTextRetrieved( | 122 void LanguageDetectionController::OnTextRetrieved( |
| 115 const std::string& http_content_language, | 123 const std::string& http_content_language, |
| 116 const std::string& html_lang, | 124 const std::string& html_lang, |
| 117 const base::string16& text_content) { | 125 const base::string16& text_content) { |
| 126 std::string cld_language; |
| 127 bool is_cld_reliable; |
| 118 std::string language = translate::DeterminePageLanguage( | 128 std::string language = translate::DeterminePageLanguage( |
| 119 http_content_language, html_lang, | 129 http_content_language, html_lang, |
| 120 GetStringByClippingLastWord(text_content, | 130 GetStringByClippingLastWord(text_content, |
| 121 language_detection::kMaxIndexChars), | 131 language_detection::kMaxIndexChars), |
| 122 nullptr /* cld_language */, nullptr /* is_cld_reliable */); | 132 &cld_language, &is_cld_reliable); |
| 123 if (language.empty()) | 133 if (language.empty()) |
| 124 return; // No language detected. | 134 return; // No language detected. |
| 125 | 135 |
| 126 DetectionDetails details; | 136 DetectionDetails details; |
| 127 details.content_language = http_content_language; | 137 details.content_language = http_content_language; |
| 128 details.html_root_language = html_lang; | 138 details.html_root_language = html_lang; |
| 129 details.adopted_language = language; | 139 details.adopted_language = language; |
| 140 details.cld_language = cld_language; |
| 141 details.is_cld_reliable = is_cld_reliable; |
| 130 language_detection_callbacks_.Notify(details); | 142 language_detection_callbacks_.Notify(details); |
| 131 } | 143 } |
| 132 | 144 |
| 133 // web::WebStateObserver implementation: | 145 // web::WebStateObserver implementation: |
| 134 | 146 |
| 135 void LanguageDetectionController::PageLoaded( | 147 void LanguageDetectionController::PageLoaded( |
| 136 web::PageLoadCompletionStatus load_completion_status) { | 148 web::PageLoadCompletionStatus load_completion_status) { |
| 137 if (load_completion_status == web::PageLoadCompletionStatus::SUCCESS) | 149 if (load_completion_status == web::PageLoadCompletionStatus::SUCCESS) |
| 138 StartLanguageDetection(); | 150 StartLanguageDetection(); |
| 139 } | 151 } |
| 140 | 152 |
| 141 void LanguageDetectionController::DidFinishNavigation( | 153 void LanguageDetectionController::DidFinishNavigation( |
| 142 web::NavigationContext* navigation_context) { | 154 web::NavigationContext* navigation_context) { |
| 143 if (navigation_context->IsSameDocument()) | 155 if (navigation_context->IsSameDocument()) |
| 144 StartLanguageDetection(); | 156 StartLanguageDetection(); |
| 145 } | 157 } |
| 146 | 158 |
| 147 void LanguageDetectionController::WebStateDestroyed() { | 159 void LanguageDetectionController::WebStateDestroyed() { |
| 148 web_state()->RemoveScriptCommandCallback(kCommandPrefix); | 160 web_state()->RemoveScriptCommandCallback(kCommandPrefix); |
| 149 } | 161 } |
| 150 | 162 |
| 151 } // namespace translate | 163 } // namespace translate |
| OLD | NEW |