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 13 namespace { 14 15 ui::OSExchangeData::Provider* CloneProvider(const ui::OSExchangeData& data) { 16 return new ui::OSExchangeDataProviderWin( 17 ui::OSExchangeDataProviderWin::GetIDataObject(data)); 18 } 19 20 } // namespace 21 22 typedef testing::Test BrowserActionDragDataTest; 23 24 TEST_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 36 TEST_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