Index: chrome/browser/chromeos/input_method/xkeyboard.cc |
diff --git a/chrome/browser/chromeos/input_method/xkeyboard.cc b/chrome/browser/chromeos/input_method/xkeyboard.cc |
index fadb3f04822546cce7479775185495c27b15dccd..4033be2dbef811b0f66c6f816b089d83f4d45259 100644 |
--- a/chrome/browser/chromeos/input_method/xkeyboard.cc |
+++ b/chrome/browser/chromeos/input_method/xkeyboard.cc |
@@ -95,6 +95,10 @@ class XKeyboardImpl : public XKeyboard { |
// KeepCapsLock("us(colemak)") would return true. |
bool KeepCapsLock(const std::string& xkb_layout_name) const; |
+ // Returns true if the current thread is the UI thread, or the process is |
+ // running on Linux. |
+ bool CurrentlyOnUIThread() const; |
+ |
// Converts |key| to a modifier key name which is used in |
// /usr/share/X11/xkb/symbols/chromeos. |
static std::string ModifierKeyToString(ModifierKey key); |
@@ -251,6 +255,7 @@ bool XKeyboardImpl::CapsLockIsEnabled() { |
} |
unsigned int XKeyboardImpl::GetNumLockMask() { |
+ CHECK(CurrentlyOnUIThread()); |
static const unsigned int kBadMask = 0; |
unsigned int real_mask = kBadMask; |
@@ -283,13 +288,9 @@ unsigned int XKeyboardImpl::GetNumLockMask() { |
void XKeyboardImpl::GetLockedModifiers(bool* out_caps_lock_enabled, |
bool* out_num_lock_enabled) { |
- // For now, don't call CHECK() here to make |
- // TabRestoreServiceTest.DontRestorePrintPreviewTab test happy. |
- // TODO(yusukes): Fix the test, then fix the if(!BrowserThread...) line below. |
- // CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ CHECK(CurrentlyOnUIThread()); |
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI) || |
- (out_num_lock_enabled && !num_lock_mask_)) { |
+ if (out_num_lock_enabled && !num_lock_mask_) { |
VLOG(1) << "Cannot get locked modifiers. Num Lock mask unknown."; |
if (out_caps_lock_enabled) { |
*out_caps_lock_enabled = false; |
@@ -390,7 +391,7 @@ std::string XKeyboardImpl::CreateFullXkbLayoutName( |
void XKeyboardImpl::SetLockedModifiers(ModifierLockStatus new_caps_lock_status, |
ModifierLockStatus new_num_lock_status) { |
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ CHECK(CurrentlyOnUIThread()); |
if (!num_lock_mask_) { |
LOG(ERROR) << "Cannot set locked modifiers. Num Lock mask unknown."; |
return; |
@@ -466,6 +467,19 @@ bool XKeyboardImpl::KeepCapsLock(const std::string& xkb_layout_name) const { |
return caps_lock_remapped_xkb_layout_names_.count(xkb_layout_name) > 0; |
} |
+bool XKeyboardImpl::CurrentlyOnUIThread() const { |
+ // It seems that the tot Chrome (as of Mar 7 2012) does not allow browser |
+ // tests to call BrowserThread::CurrentlyOn(). It ends up a CHECK failure: |
+ // FATAL:sequenced_worker_pool.cc |
+ // Check failed: constructor_message_loop_.get(). |
+ // For now, just allow unit/browser tests to call any functions in this class. |
+ // TODO(yusukes): Stop special-casing browser_tests and remove this function. |
+ if (!is_running_on_chrome_os_) { |
+ return true; |
+ } |
+ return BrowserThread::CurrentlyOn(BrowserThread::UI); |
+} |
+ |
// static |
std::string XKeyboardImpl::ModifierKeyToString(ModifierKey key) { |
switch (key) { |