diff options
author | scr@chromium.org <scr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-13 20:56:36 +0000 |
---|---|---|
committer | scr@chromium.org <scr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-13 20:56:36 +0000 |
commit | b56717517cf3296c05350bbfdcfc67077abc4484 (patch) | |
tree | 18907190b7581e58669db2b4629ebfd3f49d9c5f /chrome/browser | |
parent | 7ded9f106803da50fe3755a65865fa2b700d1633 (diff) | |
download | chromium_src-b56717517cf3296c05350bbfdcfc67077abc4484.zip chromium_src-b56717517cf3296c05350bbfdcfc67077abc4484.tar.gz chromium_src-b56717517cf3296c05350bbfdcfc67077abc4484.tar.bz2 |
Do the ReloadLocaleResources() call on the IO thread to avoid synchronization issues.
Followup to https://chromiumcodereview.appspot.com/10543015/
Forced the Reload on the same thread (IO) that was racing with the call. Since Tony doesn't want us to add synchronization to ResourceBundle from a case that's only exercised in test, we'll go this route to stop the race.
R=tony@chromium.org, estade@chromium.org
BUG=95425
TEST=browser_tests --gtest_filter=WebUIBidiCheckerBrowserTestRTL.*TestSettingsFrameStartup --gtest_also_run_disabled_tests
Review URL: https://chromiumcodereview.appspot.com/10546139
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@141964 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/ui/webui/bidi_checker_web_ui_test.cc | 27 | ||||
-rw-r--r-- | chrome/browser/ui/webui/bidi_checker_web_ui_test.h | 6 |
2 files changed, 31 insertions, 2 deletions
diff --git a/chrome/browser/ui/webui/bidi_checker_web_ui_test.cc b/chrome/browser/ui/webui/bidi_checker_web_ui_test.cc index 888d365..1493d23 100644 --- a/chrome/browser/ui/webui/bidi_checker_web_ui_test.cc +++ b/chrome/browser/ui/webui/bidi_checker_web_ui_test.cc @@ -7,6 +7,7 @@ #include "base/base_paths.h" #include "base/i18n/rtl.h" #include "base/path_service.h" +#include "base/synchronization/waitable_event.h" #include "base/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/autofill/autofill_common_test.h" @@ -20,6 +21,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/common/url_constants.h" #include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/browser_thread.h" #include "ui/base/resource/resource_bundle.h" #if defined(TOOLKIT_GTK) @@ -69,6 +71,19 @@ void WebUIBidiCheckerBrowserTestRTL::RunBidiCheckerOnPage( WebUIBidiCheckerBrowserTest::RunBidiCheckerOnPage(page_url, true); } +// static +void WebUIBidiCheckerBrowserTestRTL::SetUpOnIOThread( + base::WaitableEvent* event) { + std::string locale; + { + base::ThreadRestrictions::ScopedAllowIO allow_io_scope; + locale.assign( + ResourceBundle::GetSharedInstance().ReloadLocaleResources("he")); + } + event->Signal(); + ASSERT_FALSE(locale.empty()); +} + void WebUIBidiCheckerBrowserTestRTL::SetUpOnMainThread() { WebUIBidiCheckerBrowserTest::SetUpOnMainThread(); FilePath pak_path; @@ -79,8 +94,16 @@ void WebUIBidiCheckerBrowserTestRTL::SetUpOnMainThread() { pak_path = pak_path.AppendASCII("fake-bidi"); pak_path = pak_path.ReplaceExtension(FILE_PATH_LITERAL("pak")); ResourceBundle::GetSharedInstance().OverrideLocalePakForTest(pak_path); - ASSERT_FALSE( - ResourceBundle::GetSharedInstance().ReloadLocaleResources("he").empty()); + + // Since synchronization isn't complete for the ResourceBundle class, reload + // locale resources on the IO thread. + base::WaitableEvent event(true, false); + content::BrowserThread::PostTask( + content::BrowserThread::IO, FROM_HERE, + base::Bind(&WebUIBidiCheckerBrowserTestRTL::SetUpOnIOThread, + base::Unretained(&event))); + ui_test_utils::WaitEventSignaled(&event); + base::i18n::SetICUDefaultLocale("he"); #if defined(OS_POSIX) && defined(TOOLKIT_GTK) gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); diff --git a/chrome/browser/ui/webui/bidi_checker_web_ui_test.h b/chrome/browser/ui/webui/bidi_checker_web_ui_test.h index b4a107f..417e080 100644 --- a/chrome/browser/ui/webui/bidi_checker_web_ui_test.h +++ b/chrome/browser/ui/webui/bidi_checker_web_ui_test.h @@ -11,6 +11,10 @@ #include "chrome/browser/ui/webui/web_ui_browsertest.h" #include "chrome/test/base/in_process_browser_test.h" +namespace base { +class WaitableEvent; +} + // Base class for BidiChecker-based tests. Preloads the BidiChecker JS library // for each test. class WebUIBidiCheckerBrowserTest : public WebUIBrowserTest { @@ -43,6 +47,8 @@ class WebUIBidiCheckerBrowserTestRTL : public WebUIBidiCheckerBrowserTest { virtual void SetUpOnMainThread() OVERRIDE; virtual void CleanUpOnMainThread() OVERRIDE; + static void SetUpOnIOThread(base::WaitableEvent* event); + // The app locale before we change it std::string app_locale_; }; |