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