Home | History | Annotate | Download | only in cloud_print
      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/printing/cloud_print/cloud_print_setup_source.h"
      6 
      7 #include <algorithm>
      8 
      9 #include "base/message_loop.h"
     10 #include "base/utf_string_conversions.h"
     11 #include "base/values.h"
     12 #include "chrome/browser/google/google_util.h"
     13 #include "chrome/common/jstemplate_builder.h"
     14 #include "googleurl/src/gurl.h"
     15 #include "grit/app_resources.h"
     16 #include "grit/browser_resources.h"
     17 #include "grit/chromium_strings.h"
     18 #include "grit/generated_resources.h"
     19 #include "grit/locale_settings.h"
     20 #include "ui/base/l10n/l10n_util.h"
     21 #include "ui/base/resource/resource_bundle.h"
     22 
     23 // Define the values of standard URLs.
     24 const char CloudPrintSetupSource::kInvalidPasswordHelpUrl[] =
     25   "https://www.google.com/support/accounts/bin/answer.py?ctx=ch&answer=27444";
     26 const char CloudPrintSetupSource::kCanNotAccessAccountUrl[] =
     27   "https://www.google.com/support/accounts/bin/answer.py?answer=48598";
     28 const char CloudPrintSetupSource::kCreateNewAccountUrl[] =
     29   "https://www.google.com/accounts/NewAccount?service=chromiumsync";
     30 
     31 namespace {
     32 
     33 // Utility method to keep dictionary population code streamlined.
     34 void AddString(DictionaryValue* dictionary,
     35                const std::string& key,
     36                int resource_id) {
     37   dictionary->SetString(key, l10n_util::GetStringUTF16(resource_id));
     38 }
     39 
     40 }  // namespace
     41 
     42 CloudPrintSetupSource::CloudPrintSetupSource()
     43   : DataSource(chrome::kCloudPrintSetupHost, MessageLoop::current()) {
     44 }
     45 
     46 void CloudPrintSetupSource::StartDataRequest(const std::string& path_raw,
     47                                              bool is_incognito,
     48                                              int request_id) {
     49   const char kCloudPrintSetupPath[] = "cloudprintsetup";
     50   const char kCloudPrintGaiaLoginPath[] = "gaialogin";
     51   const char kCloudPrintSetupFlowPath[] = "setupflow";
     52   const char kCloudPrintSetupDonePath[] = "setupdone";
     53 
     54   DictionaryValue localized_strings;
     55   DictionaryValue* dict = &localized_strings;
     56 
     57   std::string response;
     58   if (path_raw == kCloudPrintSetupPath) {
     59     AddString(dict, "header", IDS_CLOUD_PRINT_SETUP_HEADER);
     60     AddString(dict, "explain", IDS_CLOUD_PRINT_SETUP_EXPLAIN);
     61     AddString(dict, "anywhereheader", IDS_CLOUD_PRINT_SETUP_ANYWHERE_HEADER);
     62     AddString(dict, "anywhereexplain", IDS_CLOUD_PRINT_SETUP_ANYWHERE_EXPLAIN);
     63     AddString(dict, "printerheader", IDS_CLOUD_PRINT_SETUP_PRINTER_HEADER);
     64     AddString(dict, "printerexplain", IDS_CLOUD_PRINT_SETUP_PRINTER_EXPLAIN);
     65     AddString(dict, "sharingheader", IDS_CLOUD_PRINT_SETUP_SHARING_HEADER);
     66     AddString(dict, "sharingexplain", IDS_CLOUD_PRINT_SETUP_SHARING_EXPLAIN);
     67 
     68     static const base::StringPiece html(ResourceBundle::GetSharedInstance()
     69         .GetRawDataResource(IDR_CLOUD_PRINT_SETUP_LOGIN_HTML));
     70     SetFontAndTextDirection(dict);
     71     response = jstemplate_builder::GetI18nTemplateHtml(html, dict);
     72   } else if (path_raw == kCloudPrintGaiaLoginPath) {
     73     // Start by setting the per-locale URLs we show on the setup wizard.
     74     dict->SetString("invalidpasswordhelpurl",
     75                    GetLocalizedUrl(kInvalidPasswordHelpUrl));
     76     dict->SetString("cannotaccessaccounturl",
     77                    GetLocalizedUrl(kCanNotAccessAccountUrl));
     78     dict->SetString("createnewaccounturl",
     79                    GetLocalizedUrl(kCreateNewAccountUrl));
     80 
     81     // None of the strings used here currently have sync-specific wording in
     82     // them.  There is a unit test to catch if that happens.
     83     dict->SetString("introduction", "");
     84     AddString(dict, "signinprefix", IDS_SYNC_LOGIN_SIGNIN_PREFIX);
     85     AddString(dict, "signinsuffix", IDS_SYNC_LOGIN_SIGNIN_SUFFIX);
     86     AddString(dict, "cannotbeblank", IDS_SYNC_CANNOT_BE_BLANK);
     87     AddString(dict, "emaillabel", IDS_SYNC_LOGIN_EMAIL);
     88     AddString(dict, "passwordlabel", IDS_SYNC_LOGIN_PASSWORD);
     89     AddString(dict, "invalidcredentials", IDS_SYNC_INVALID_USER_CREDENTIALS);
     90     AddString(dict, "signin", IDS_SYNC_SIGNIN);
     91     AddString(dict, "couldnotconnect", IDS_SYNC_LOGIN_COULD_NOT_CONNECT);
     92     AddString(dict, "cannotaccessaccount", IDS_SYNC_CANNOT_ACCESS_ACCOUNT);
     93     AddString(dict, "createaccount", IDS_SYNC_CREATE_ACCOUNT);
     94     AddString(dict, "cancel", IDS_CANCEL);
     95     AddString(dict, "settingup", IDS_SYNC_LOGIN_SETTING_UP);
     96     AddString(dict, "success", IDS_SYNC_SUCCESS);
     97     AddString(dict, "errorsigningin", IDS_SYNC_ERROR_SIGNING_IN);
     98     AddString(dict, "captchainstructions", IDS_SYNC_GAIA_CAPTCHA_INSTRUCTIONS);
     99     AddString(dict, "invalidaccesscode", IDS_SYNC_INVALID_ACCESS_CODE_LABEL);
    100     AddString(dict, "enteraccesscode", IDS_SYNC_ENTER_ACCESS_CODE_LABEL);
    101     AddString(dict, "getaccesscodehelp", IDS_SYNC_ACCESS_CODE_HELP_LABEL);
    102     AddString(dict, "getaccesscodeurl", IDS_SYNC_GET_ACCESS_CODE_URL);
    103 
    104     static const base::StringPiece html(ResourceBundle::GetSharedInstance()
    105         .GetRawDataResource(IDR_GAIA_LOGIN_HTML));
    106     SetFontAndTextDirection(dict);
    107     response = jstemplate_builder::GetI18nTemplateHtml(html, dict);
    108   } else if (path_raw == kCloudPrintSetupDonePath) {
    109     AddString(dict, "testpage", IDS_CLOUD_PRINT_SETUP_TEST_PAGE);
    110     AddString(dict, "success", IDS_SYNC_SUCCESS);
    111     AddString(dict, "okay", IDS_SYNC_SETUP_OK_BUTTON_LABEL);
    112     static const base::StringPiece html(ResourceBundle::GetSharedInstance()
    113         .GetRawDataResource(IDR_CLOUD_PRINT_SETUP_DONE_HTML));
    114     SetFontAndTextDirection(dict);
    115     response = jstemplate_builder::GetI18nTemplateHtml(html, dict);
    116   } else if (path_raw == kCloudPrintSetupFlowPath) {
    117     static const base::StringPiece html(
    118         ResourceBundle::GetSharedInstance()
    119         .GetRawDataResource(IDR_CLOUD_PRINT_SETUP_FLOW_HTML));
    120     response = html.as_string();
    121   }
    122   // Send the response.
    123   scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes);
    124   html_bytes->data.resize(response.size());
    125   std::copy(response.begin(), response.end(), html_bytes->data.begin());
    126   SendResponse(request_id, html_bytes);
    127 }
    128 
    129 std::string CloudPrintSetupSource::GetMimeType(const std::string& path) const {
    130   return "text/html";
    131 }
    132 
    133 std::string CloudPrintSetupSource::GetLocalizedUrl(
    134     const std::string& url) const {
    135   GURL original_url(url);
    136   DCHECK(original_url.is_valid());
    137   GURL localized_url = google_util::AppendGoogleLocaleParam(original_url);
    138   return localized_url.spec();
    139 }
    140