1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/pickle.h"
6#include "chrome/browser/ui/views/extensions/browser_action_drag_data.h"
7#include "chrome/test/base/testing_profile.h"
8#include "testing/gtest/include/gtest/gtest.h"
9#include "ui/base/dragdrop/os_exchange_data.h"
10#include "ui/base/dragdrop/os_exchange_data_provider_win.h"
11#include "url/gurl.h"
12
13namespace {
14
15ui::OSExchangeData::Provider* CloneProvider(const ui::OSExchangeData& data) {
16  return new ui::OSExchangeDataProviderWin(
17      ui::OSExchangeDataProviderWin::GetIDataObject(data));
18}
19
20}  // namespace
21
22typedef testing::Test BrowserActionDragDataTest;
23
24TEST_F(BrowserActionDragDataTest, ArbitraryFormat) {
25  TestingProfile profile;
26  profile.SetID(L"id");
27
28  ui::OSExchangeData data;
29  data.SetURL(GURL("http://www.google.com"), L"Title");
30
31  // We only support our format, so this should not succeed.
32  BrowserActionDragData drag_data;
33  EXPECT_FALSE(drag_data.Read(ui::OSExchangeData(CloneProvider(data))));
34}
35
36TEST_F(BrowserActionDragDataTest, BrowserActionDragDataFormat) {
37  TestingProfile profile;
38  Profile* profile_ptr = &profile;
39  profile.SetID(L"id");
40
41  const std::string extension_id = "42";
42  Pickle pickle;
43  pickle.WriteBytes(&profile_ptr, sizeof(&profile));
44  pickle.WriteString(extension_id);
45  pickle.WriteUInt64(42);
46
47  ui::OSExchangeData data;
48  data.SetPickledData(BrowserActionDragData::GetBrowserActionCustomFormat(),
49                      pickle);
50
51  BrowserActionDragData drag_data;
52  EXPECT_TRUE(drag_data.Read(ui::OSExchangeData(CloneProvider(data))));
53  ASSERT_TRUE(drag_data.IsFromProfile(profile.GetOriginalProfile()));
54  ASSERT_STREQ(extension_id.c_str(), drag_data.id().c_str());
55  ASSERT_EQ(42, drag_data.index());
56}
57