diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-17 15:31:36 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-02-28 14:24:41 +0100 |
commit | c3ab932f8b2f3a52383ce0db3ff67c925b138bde (patch) | |
tree | 48a9899f1ac5a4f29b6814c2e6c6717300cad137 /src/core/content_main_delegate_qt.cpp | |
parent | 26b4267a3b00ebedb560169d09f974cd87a6a370 (diff) |
Adaptations for Chromium 79
Fixes: QTBUG-80737
Fixes: QTBUG-81556
Fixes: QTBUG-81614
Change-Id: Ie6a69cdbf46d0508bff226f1b8fed28a618e1949
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'src/core/content_main_delegate_qt.cpp')
-rw-r--r-- | src/core/content_main_delegate_qt.cpp | 64 |
1 files changed, 40 insertions, 24 deletions
diff --git a/src/core/content_main_delegate_qt.cpp b/src/core/content_main_delegate_qt.cpp index cb23a5287..ff6bf4366 100644 --- a/src/core/content_main_delegate_qt.cpp +++ b/src/core/content_main_delegate_qt.cpp @@ -79,36 +79,52 @@ ContentClient *GetContentClient(); namespace QtWebEngineCore { +namespace { + // The logic of this function is based on chrome/common/net/net_resource_provider.cc // Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE.Chromium file. -static std::string constructDirHeaderHTML() -{ - base::DictionaryValue dict; - dict.SetString("header", l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_HEADER)); - dict.SetString("parentDirText", l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_PARENT)); - dict.SetString("headerName", l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_NAME)); - dict.SetString("headerSize", l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_SIZE)); - dict.SetString("headerDateModified", - l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_DATE_MODIFIED)); - dict.SetString("language", l10n_util::GetLanguage(base::i18n::GetConfiguredLocale())); - dict.SetString("listingParsingErrorBoxText", - l10n_util::GetStringFUTF16(IDS_DIRECTORY_LISTING_PARSING_ERROR_BOX_TEXT, - toString16(QCoreApplication::applicationName()))); - dict.SetString("textdirection", base::i18n::IsRTL() ? "rtl" : "ltr"); - std::string html = webui::GetI18nTemplateHtml( - ui::ResourceBundle::GetSharedInstance().GetRawDataResource(IDR_DIR_HEADER_HTML), - &dict); - return html; -} -static base::StringPiece PlatformResourceProvider(int key) { - if (key == IDR_DIR_HEADER_HTML) { - static std::string html_data = constructDirHeaderHTML(); - return base::StringPiece(html_data); +// The net module doesn't have access to this HTML or the strings that need to +// be localized. The Chrome locale will never change while we're running, so +// it's safe to have a static string that we always return a pointer into. +struct LazyDirectoryListerCacher +{ + LazyDirectoryListerCacher() + { + base::DictionaryValue dict; + dict.SetString("header", l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_HEADER)); + dict.SetString("parentDirText", l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_PARENT)); + dict.SetString("headerName", l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_NAME)); + dict.SetString("headerSize", l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_SIZE)); + dict.SetString("headerDateModified", + l10n_util::GetStringUTF16(IDS_DIRECTORY_LISTING_DATE_MODIFIED)); + dict.SetString("language", l10n_util::GetLanguage(base::i18n::GetConfiguredLocale())); + dict.SetString("listingParsingErrorBoxText", + l10n_util::GetStringFUTF16(IDS_DIRECTORY_LISTING_PARSING_ERROR_BOX_TEXT, + toString16(QCoreApplication::applicationName()))); + dict.SetString("textdirection", base::i18n::IsRTL() ? "rtl" : "ltr"); + std::string html = + webui::GetI18nTemplateHtml( + ui::ResourceBundle::GetSharedInstance().DecompressDataResource(IDR_DIR_HEADER_HTML), + &dict); + html_data = base::RefCountedString::TakeString(&html); } - return base::StringPiece(); + + scoped_refptr<base::RefCountedMemory> html_data; +}; + +} // namespace + +static scoped_refptr<base::RefCountedMemory> PlatformResourceProvider(int key) +{ + static base::NoDestructor<LazyDirectoryListerCacher> lazy_dir_lister; + + if (IDR_DIR_HEADER_HTML == key) + return lazy_dir_lister->html_data; + + return ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes(key); } // Logging logic is based on chrome/common/logging_chrome.cc: |