1 // Copyright (c) 2011 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 #include "chrome/browser/remoting/remoting_resources_source.h" 6 7 #include <algorithm> 8 #include <string> 9 10 #include "base/message_loop.h" 11 #include "base/utf_string_conversions.h" 12 #include "base/values.h" 13 #include "chrome/browser/google/google_util.h" 14 #include "chrome/common/jstemplate_builder.h" 15 #include "googleurl/src/gurl.h" 16 #include "grit/app_resources.h" 17 #include "grit/browser_resources.h" 18 #include "grit/chromium_strings.h" 19 #include "grit/generated_resources.h" 20 #include "grit/locale_settings.h" 21 #include "ui/base/l10n/l10n_util.h" 22 #include "ui/base/resource/resource_bundle.h" 23 24 // Define the values of standard URLs. 25 const char RemotingResourcesSource::kInvalidPasswordHelpUrl[] = 26 "https://www.google.com/support/accounts/bin/answer.py?ctx=ch&answer=27444"; 27 const char RemotingResourcesSource::kCanNotAccessAccountUrl[] = 28 "https://www.google.com/support/accounts/bin/answer.py?answer=48598"; 29 const char RemotingResourcesSource::kCreateNewAccountUrl[] = 30 "https://www.google.com/accounts/NewAccount?service=chromiumsync"; 31 32 RemotingResourcesSource::RemotingResourcesSource() 33 : DataSource(chrome::kChromeUIRemotingResourcesHost, 34 MessageLoop::current()) { 35 } 36 37 void RemotingResourcesSource::StartDataRequest(const std::string& path_raw, 38 bool is_incognito, 39 int request_id) { 40 const char kRemotingGaiaLoginPath[] = "gaialogin"; 41 const char kRemotingSetupFlowPath[] = "setup"; 42 const char kRemotingSetupDonePath[] = "setupdone"; 43 const char kRemotingSettingUpPath[] = "settingup"; 44 const char kRemotingSetupErrorPath[] = "setuperror"; 45 46 std::string response; 47 if (path_raw == kRemotingGaiaLoginPath) { 48 DictionaryValue localized_strings; 49 50 // Start by setting the per-locale URLs we show on the setup wizard. 51 localized_strings.SetString("invalidpasswordhelpurl", 52 GetLocalizedUrl(kInvalidPasswordHelpUrl)); 53 localized_strings.SetString("cannotaccessaccounturl", 54 GetLocalizedUrl(kCanNotAccessAccountUrl)); 55 localized_strings.SetString("createnewaccounturl", 56 GetLocalizedUrl(kCreateNewAccountUrl)); 57 58 localized_strings.SetString("settingupsync", 59 l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_SETTING_UP_SYNC)); 60 localized_strings.SetString("introduction", ""); 61 localized_strings.SetString("signinprefix", 62 l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_SIGNIN_PREFIX)); 63 localized_strings.SetString("signinsuffix", 64 l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_SIGNIN_SUFFIX)); 65 localized_strings.SetString("cannotbeblank", 66 l10n_util::GetStringUTF16(IDS_SYNC_CANNOT_BE_BLANK)); 67 localized_strings.SetString("emaillabel", 68 l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_EMAIL)); 69 localized_strings.SetString("passwordlabel", 70 l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_PASSWORD)); 71 localized_strings.SetString("invalidcredentials", 72 l10n_util::GetStringUTF16(IDS_SYNC_INVALID_USER_CREDENTIALS)); 73 localized_strings.SetString("signin", 74 l10n_util::GetStringUTF16(IDS_SYNC_SIGNIN)); 75 localized_strings.SetString("couldnotconnect", 76 l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_COULD_NOT_CONNECT)); 77 localized_strings.SetString("cannotaccessaccount", 78 l10n_util::GetStringUTF16(IDS_SYNC_CANNOT_ACCESS_ACCOUNT)); 79 localized_strings.SetString("createaccount", 80 l10n_util::GetStringUTF16(IDS_SYNC_CREATE_ACCOUNT)); 81 localized_strings.SetString("cancel", 82 l10n_util::GetStringUTF16(IDS_CANCEL)); 83 localized_strings.SetString("settingup", 84 l10n_util::GetStringUTF16(IDS_SYNC_LOGIN_SETTING_UP)); 85 localized_strings.SetString("success", 86 l10n_util::GetStringUTF16(IDS_SYNC_SUCCESS)); 87 localized_strings.SetString("errorsigningin", 88 l10n_util::GetStringUTF16(IDS_SYNC_ERROR_SIGNING_IN)); 89 localized_strings.SetString("captchainstructions", 90 l10n_util::GetStringUTF16(IDS_SYNC_GAIA_CAPTCHA_INSTRUCTIONS)); 91 localized_strings.SetString("invalidaccesscode", 92 l10n_util::GetStringUTF16(IDS_SYNC_INVALID_ACCESS_CODE_LABEL)); 93 localized_strings.SetString("enteraccesscode", 94 l10n_util::GetStringUTF16(IDS_SYNC_ENTER_ACCESS_CODE_LABEL)); 95 localized_strings.SetString("getaccesscodehelp", 96 l10n_util::GetStringUTF16(IDS_SYNC_ACCESS_CODE_HELP_LABEL)); 97 localized_strings.SetString("getaccesscodeurl", 98 l10n_util::GetStringUTF16(IDS_SYNC_GET_ACCESS_CODE_URL)); 99 100 static const base::StringPiece html(ResourceBundle::GetSharedInstance() 101 .GetRawDataResource(IDR_GAIA_LOGIN_HTML)); 102 SetFontAndTextDirection(&localized_strings); 103 response = jstemplate_builder::GetI18nTemplateHtml( 104 html, &localized_strings); 105 } else if (path_raw == kRemotingSettingUpPath) { 106 DictionaryValue localized_strings; 107 localized_strings.SetString("settingup", 108 l10n_util::GetStringUTF16(IDS_REMOTING_SETTING_UP_MESSAGE)); 109 localized_strings.SetString("cancel", 110 l10n_util::GetStringUTF16(IDS_CANCEL)); 111 static const base::StringPiece html(ResourceBundle::GetSharedInstance() 112 .GetRawDataResource(IDR_REMOTING_SETTING_UP_HTML)); 113 SetFontAndTextDirection(&localized_strings); 114 response = jstemplate_builder::GetI18nTemplateHtml( 115 html, &localized_strings); 116 } else if (path_raw == kRemotingSetupDonePath) { 117 DictionaryValue localized_strings; 118 localized_strings.SetString("success", 119 l10n_util::GetStringUTF16(IDS_REMOTING_SUCCESS_TITLE)); 120 localized_strings.SetString("okay", 121 l10n_util::GetStringUTF16(IDS_OK)); 122 static const base::StringPiece html(ResourceBundle::GetSharedInstance() 123 .GetRawDataResource(IDR_REMOTING_SETUP_DONE_HTML)); 124 SetFontAndTextDirection(&localized_strings); 125 response = jstemplate_builder::GetI18nTemplateHtml( 126 html, &localized_strings); 127 } else if (path_raw == kRemotingSetupErrorPath) { 128 DictionaryValue localized_strings; 129 localized_strings.SetString("close", 130 l10n_util::GetStringUTF16(IDS_CLOSE)); 131 localized_strings.SetString("retry", 132 l10n_util::GetStringUTF16(IDS_REMOTING_RETRY_BUTTON_TEXT)); 133 static const base::StringPiece html(ResourceBundle::GetSharedInstance() 134 .GetRawDataResource(IDR_REMOTING_SETUP_ERROR_HTML)); 135 SetFontAndTextDirection(&localized_strings); 136 response = jstemplate_builder::GetI18nTemplateHtml( 137 html, &localized_strings); 138 } else if (path_raw == kRemotingSetupFlowPath) { 139 static const base::StringPiece html(ResourceBundle::GetSharedInstance() 140 .GetRawDataResource(IDR_REMOTING_SETUP_FLOW_HTML)); 141 response = html.as_string(); 142 } 143 // Send the response. 144 scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes); 145 html_bytes->data.resize(response.size()); 146 std::copy(response.begin(), response.end(), html_bytes->data.begin()); 147 SendResponse(request_id, html_bytes); 148 } 149 150 std::string RemotingResourcesSource::GetMimeType( 151 const std::string& path) const { 152 return "text/html"; 153 } 154 155 std::string RemotingResourcesSource::GetLocalizedUrl( 156 const std::string& url) const { 157 GURL original_url(url); 158 DCHECK(original_url.is_valid()); 159 GURL localized_url = google_util::AppendGoogleLocaleParam(original_url); 160 return localized_url.spec(); 161 } 162