// Copyright 2016 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 file. #include "ui/views/mus/clipboard_mus.h" #include "base/message_loop/message_loop.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/events/platform/platform_event_source.h" #include "ui/views/mus/mus_client.h" #include "ui/views/test/scoped_views_test_helper.h" namespace ui { // So we can't make ScopedViewsTestHelper a global. We must set up // ScopedViewsTestHelper on every test (which will create the connection to // mus). And we can't modify PlatformClipboardTraits to not be a pure static // struct. So to solve these lifetime issues, create an adapter that owns the // ScopedViewsTestHelper and then . class ForwardingTestingClipboard : public ui::Clipboard { public: ForwardingTestingClipboard() : test_helper_(new views::ScopedViewsTestHelper), clipboard_to_test_(Clipboard::GetForCurrentThread()) { // If we don't have a window manager connection, we will get the default // platform clipboard instead. EXPECT_TRUE(views::MusClient::Exists()); } ~ForwardingTestingClipboard() override { Clipboard::DestroyClipboardForCurrentThread(); } void Destroy() { delete this; } protected: // Overridden from ui::Clipboard: void OnPreShutdown() override {} uint64_t GetSequenceNumber(ClipboardType type) const override { return clipboard_to_test_->GetSequenceNumber(type); } bool IsFormatAvailable(const FormatType& format, ClipboardType type) const override { return clipboard_to_test_->IsFormatAvailable(format, type); } void Clear(ClipboardType type) override { clipboard_to_test_->Clear(type); } void ReadAvailableTypes(ClipboardType type, std::vector* types, bool* contains_filenames) const override { clipboard_to_test_->ReadAvailableTypes(type, types, contains_filenames); } void ReadText(ClipboardType type, base::string16* result) const override { clipboard_to_test_->ReadText(type, result); } void ReadAsciiText(ClipboardType type, std::string* result) const override { clipboard_to_test_->ReadAsciiText(type, result); } void ReadHTML(ClipboardType type, base::string16* markup, std::string* src_url, uint32_t* fragment_start, uint32_t* fragment_end) const override { clipboard_to_test_->ReadHTML(type, markup, src_url, fragment_start, fragment_end); } void ReadRTF(ClipboardType type, std::string* result) const override { clipboard_to_test_->ReadRTF(type, result); } SkBitmap ReadImage(ClipboardType type) const override { return clipboard_to_test_->ReadImage(type); } void ReadCustomData(ClipboardType clipboard_type, const base::string16& type, base::string16* result) const override { clipboard_to_test_->ReadCustomData(clipboard_type, type, result); } void ReadBookmark(base::string16* title, std::string* url) const override { clipboard_to_test_->ReadBookmark(title, url); } void ReadData(const FormatType& format, std::string* result) const override { clipboard_to_test_->ReadData(format, result); } void WriteObjects(ClipboardType type, const ObjectMap& objects) override { clipboard_to_test_->WriteObjects(type, objects); } void WriteText(const char* text_data, size_t text_len) override { clipboard_to_test_->WriteText(text_data, text_len); } void WriteHTML(const char* markup_data, size_t markup_len, const char* url_data, size_t url_len) override { clipboard_to_test_->WriteHTML(markup_data, markup_len, url_data, url_len); } void WriteRTF(const char* rtf_data, size_t data_len) override { clipboard_to_test_->WriteRTF(rtf_data, data_len); } void WriteBookmark(const char* title_data, size_t title_len, const char* url_data, size_t url_len) override { clipboard_to_test_->WriteBookmark(title_data, title_len, url_data, url_len); } void WriteWebSmartPaste() override { clipboard_to_test_->WriteWebSmartPaste(); } void WriteBitmap(const SkBitmap& bitmap) override { clipboard_to_test_->WriteBitmap(bitmap); } void WriteData(const FormatType& format, const char* data_data, size_t data_len) override { clipboard_to_test_->WriteData(format, data_data, data_len); } private: std::unique_ptr test_helper_; ui::Clipboard* clipboard_to_test_; DISALLOW_COPY_AND_ASSIGN(ForwardingTestingClipboard); }; struct PlatformClipboardTraits { static std::unique_ptr GetEventSource() { return nullptr; } static Clipboard* Create() { return new ForwardingTestingClipboard(); } static bool IsMusTest() { return true; } static void Destroy(Clipboard* clipboard) { static_cast(clipboard)->Destroy(); } }; using TypesToTest = PlatformClipboardTraits; } // namespace ui #include "ui/base/clipboard/clipboard_test_template.h"