Index: components/arc/clipboard/arc_clipboard_bridge.cc |
diff --git a/components/arc/clipboard/arc_clipboard_bridge.cc b/components/arc/clipboard/arc_clipboard_bridge.cc |
index 06e39fb4b5e2ccfe2b911ca21ba78ddf507e9a88..169869c0d113eed2a70680dccba97c12569e8606 100644 |
--- a/components/arc/clipboard/arc_clipboard_bridge.cc |
+++ b/components/arc/clipboard/arc_clipboard_bridge.cc |
@@ -27,18 +27,26 @@ static mojo::String ConvertString16ToMojoString(const base::string16& input) { |
namespace arc { |
-ArcClipboardBridge::ArcClipboardBridge(ArcBridgeService* bridge_service) |
- : bridge_service_(bridge_service), binding_(this) { |
- bridge_service_->AddObserver(this); |
+ArcClipboardBridge::ArcClipboardBridge(ArcBridgeService* arc_bridge_service) |
+ : arc_bridge_service_(arc_bridge_service), binding_(this) { |
+ DCHECK(arc_bridge_service_); |
+ arc_bridge_service_->AddObserver(this); |
+ |
+ // If ClipboardInstance was ready before we AddObserver(), we won't get |
+ // OnClipboardInstanceReady events. For such case, we have to call it |
+ // explicitly. |
+ if (arc_bridge_service_->clipboard_instance()) |
+ OnClipboardInstanceReady(); |
} |
ArcClipboardBridge::~ArcClipboardBridge() { |
DCHECK(CalledOnValidThread()); |
- bridge_service_->RemoveObserver(this); |
+ arc_bridge_service_->RemoveObserver(this); |
} |
void ArcClipboardBridge::OnClipboardInstanceReady() { |
- ClipboardInstance* clipboard_instance = bridge_service_->clipboard_instance(); |
+ ClipboardInstance* clipboard_instance = |
+ arc_bridge_service_->clipboard_instance(); |
if (!clipboard_instance) { |
LOG(ERROR) << "OnClipboardInstanceReady called, " |
<< "but no clipboard instance found"; |
@@ -63,7 +71,8 @@ void ArcClipboardBridge::GetTextContent() { |
ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); |
clipboard->ReadText(ui::CLIPBOARD_TYPE_COPY_PASTE, &text); |
- ClipboardInstance* clipboard_instance = bridge_service_->clipboard_instance(); |
+ ClipboardInstance* clipboard_instance = |
+ arc_bridge_service_->clipboard_instance(); |
clipboard_instance->OnGetTextContent(ConvertString16ToMojoString(text)); |
} |