Home | History | Annotate | Download | only in remoting
      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