Home | History | Annotate | Download | only in net
      1 // Copyright (c) 2009 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/common/net/net_resource_provider.h"
      6 
      7 #include <string>
      8 
      9 #include "base/string_piece.h"
     10 #include "base/values.h"
     11 #include "chrome/common/jstemplate_builder.h"
     12 #include "grit/chromium_strings.h"
     13 #include "grit/generated_resources.h"
     14 #include "grit/net_resources.h"
     15 #include "ui/base/l10n/l10n_util.h"
     16 #include "ui/base/resource/resource_bundle.h"
     17 
     18 namespace {
     19 
     20 // The net module doesn't have access to this HTML or the strings that need to
     21 // be localized.  The Chrome locale will never change while we're running, so
     22 // it's safe to have a static string that we always return a pointer into.
     23 // This allows us to have the ResourceProvider return a pointer into the actual
     24 // resource (via a StringPiece), instead of always copying resources.
     25 struct LazyDirectoryListerCacher {
     26   LazyDirectoryListerCacher() {
     27     DictionaryValue value;
     28     value.SetString("header",
     29                     l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_HEADER));
     30     value.SetString("parentDirText",
     31                     l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_PARENT));
     32     value.SetString("headerName",
     33                     l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_NAME));
     34     value.SetString("headerSize",
     35                     l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_SIZE));
     36     value.SetString("headerDateModified",
     37         l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_DATE_MODIFIED));
     38     value.SetString("listingParsingErrorBoxText",
     39         l10n_util::GetStringFUTF16(IDS_DIRECTORY_LISTING_PARSING_ERROR_BOX_TEXT,
     40             l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)));
     41     html_data = jstemplate_builder::GetI18nTemplateHtml(
     42         ResourceBundle::GetSharedInstance().GetRawDataResource(
     43             IDR_DIR_HEADER_HTML),
     44         &value);
     45   }
     46 
     47   std::string html_data;
     48 };
     49 
     50 }  // namespace
     51 
     52 namespace chrome_common_net {
     53 
     54 base::StringPiece NetResourceProvider(int key) {
     55   static LazyDirectoryListerCacher lazy_dir_lister;
     56 
     57   if (IDR_DIR_HEADER_HTML == key)
     58     return base::StringPiece(lazy_dir_lister.html_data);
     59 
     60   return ResourceBundle::GetSharedInstance().GetRawDataResource(key);
     61 }
     62 
     63 }  // namespace chrome_common_net
     64