summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorscr@chromium.org <scr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-13 20:56:36 +0000
committerscr@chromium.org <scr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-13 20:56:36 +0000
commitb56717517cf3296c05350bbfdcfc67077abc4484 (patch)
tree18907190b7581e58669db2b4629ebfd3f49d9c5f /chrome/browser
parent7ded9f106803da50fe3755a65865fa2b700d1633 (diff)
downloadchromium_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.cc27
-rw-r--r--chrome/browser/ui/webui/bidi_checker_web_ui_test.h6
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_;
};