172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/pickle.h"
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/extensions/browser_action_drag_data.h"
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h"
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "googleurl/src/gurl.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/dragdrop/os_exchange_data.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/dragdrop/os_exchange_data_provider_win.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenui::OSExchangeData::Provider* CloneProvider(const ui::OSExchangeData& data) {
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  return new ui::OSExchangeDataProviderWin(
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      ui::OSExchangeDataProviderWin::GetIDataObject(data));
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef testing::Test BrowserActionDragDataTest;
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BrowserActionDragDataTest, ArbitraryFormat) {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestingProfile profile;
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  profile.SetID(L"id");
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ui::OSExchangeData data;
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  data.SetURL(GURL("http://www.google.com"), L"Title");
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // We only support our format, so this should not succeed.
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BrowserActionDragData drag_data;
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_FALSE(drag_data.Read(ui::OSExchangeData(CloneProvider(data))));
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(BrowserActionDragDataTest, BrowserActionDragDataFormat) {
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestingProfile profile;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  profile.SetID(L"id");
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string extension_id = "42";
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const ProfileId profile_id = profile.GetRuntimeId();
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Pickle pickle;
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pickle.WriteBytes(&profile_id, sizeof(profile_id));
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pickle.WriteString(extension_id);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pickle.WriteInt(42);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ui::OSExchangeData data;
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  data.SetPickledData(BrowserActionDragData::GetBrowserActionCustomFormat(),
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      pickle);
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BrowserActionDragData drag_data;
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_TRUE(drag_data.Read(ui::OSExchangeData(CloneProvider(data))));
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(drag_data.IsFromProfile(profile.GetOriginalProfile()));
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_STREQ(extension_id.c_str(), drag_data.id().c_str());
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_EQ(42, drag_data.index());
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
57