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