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