blob: 9db8fe5073208c4bc0475ef5f22351e216d54c23 [file] [log] [blame]
// 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<base::string16>* 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<views::ScopedViewsTestHelper> test_helper_;
ui::Clipboard* clipboard_to_test_;
DISALLOW_COPY_AND_ASSIGN(ForwardingTestingClipboard);
};
struct PlatformClipboardTraits {
static std::unique_ptr<PlatformEventSource> GetEventSource() {
return nullptr;
}
static Clipboard* Create() {
return new ForwardingTestingClipboard();
}
static bool IsMusTest() { return true; }
static void Destroy(Clipboard* clipboard) {
static_cast<ForwardingTestingClipboard*>(clipboard)->Destroy();
}
};
using TypesToTest = PlatformClipboardTraits;
} // namespace ui
#include "ui/base/clipboard/clipboard_test_template.h"