Index: chrome_frame/test/urlmon_moniker_unittest.cc |
diff --git a/chrome_frame/test/urlmon_moniker_unittest.cc b/chrome_frame/test/urlmon_moniker_unittest.cc |
deleted file mode 100644 |
index 75c9c319fde48758a068e1348233952caf0f6538..0000000000000000000000000000000000000000 |
--- a/chrome_frame/test/urlmon_moniker_unittest.cc |
+++ /dev/null |
@@ -1,253 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <atlbase.h> |
-#include <atlcom.h> |
- |
-#include "base/file_util.h" |
-#include "base/path_service.h" |
-#include "base/win/scoped_comptr.h" |
-#include "chrome_frame/test/chrome_frame_test_utils.h" |
-#include "chrome_frame/test/urlmon_moniker_tests.h" |
-#include "chrome_frame/urlmon_bind_status_callback.h" |
- |
-using chrome_frame_test::ScopedVirtualizeHklmAndHkcu; |
-using testing::Return; |
-using testing::Eq; |
- |
-class MonikerPatchTest : public testing::Test { |
- protected: |
- MonikerPatchTest() { |
- } |
- |
- virtual void SetUp() { |
- DeleteAllSingletons(); |
- PathService::Get(base::DIR_SOURCE_ROOT, &test_file_path_); |
- test_file_path_ = test_file_path_.Append(FILE_PATH_LITERAL("chrome_frame")) |
- .Append(FILE_PATH_LITERAL("test")) |
- .Append(FILE_PATH_LITERAL("data")); |
- } |
- |
- bool ReadFileAsString(const wchar_t* file_name, std::string* file_contents) { |
- EXPECT_TRUE(file_name); |
- base::FilePath file_path = test_file_path_.Append(file_name); |
- return base::ReadFileToString(file_path, file_contents); |
- } |
- |
- static bool StringToStream(const std::string& data, IStream** ret) { |
- EXPECT_TRUE(!data.empty()); |
- |
- base::win::ScopedComPtr<IStream> stream; |
- HRESULT hr = CreateStreamOnHGlobal(NULL, TRUE, stream.Receive()); |
- EXPECT_HRESULT_SUCCEEDED(hr); |
- if (FAILED(hr)) { |
- return false; |
- } |
- |
- DWORD written = 0; |
- hr = stream->Write(data.c_str(), data.size(), &written); |
- EXPECT_HRESULT_SUCCEEDED(hr); |
- EXPECT_EQ(data.size(), written); |
- |
- bool result = false; |
- if (SUCCEEDED(hr)) { |
- RewindStream(stream); |
- *ret = stream.Detach(); |
- result = true; |
- } |
- |
- return result; |
- } |
- |
- base::FilePath test_file_path_; |
- ScopedVirtualizeHklmAndHkcu virtualized_registry_; |
-}; |
- |
-// Tests the CacheStream class by writing content into a stream object |
-// and verify that reading that stream back |
-TEST_F(MonikerPatchTest, CacheStream) { |
- const char data[] = "ReadStreamCacheTest"; |
- char ret[2 * sizeof(data)] = {0}; |
- DWORD read = 0; |
- |
- // Test 1: empty stream reads nothing |
- CComObjectStackEx<CacheStream> cache_stream1; |
- EXPECT_EQ(S_FALSE, cache_stream1.Read(ret, sizeof(ret), &read)); |
- EXPECT_EQ(0, read); |
- |
- // Test 2: Read from initialized cache |
- CComObjectStackEx<CacheStream> cache_stream2; |
- cache_stream2.Initialize(data, sizeof(data), false); |
- EXPECT_HRESULT_SUCCEEDED(cache_stream2.Read(ret, sizeof(ret), &read)); |
- EXPECT_EQ(sizeof(data), read); |
- EXPECT_EQ(std::string(data), std::string(ret)); |
- |
- read = 0; |
- EXPECT_EQ(E_PENDING, cache_stream2.Read(ret, sizeof(ret), &read)); |
- EXPECT_EQ(0, read); |
-} |
- |
-ACTION_P3(ReadStream, buffer, size, ret) { |
- EXPECT_EQ(TYMED_ISTREAM, arg3->tymed); |
- *ret = arg3->pstm->Read(buffer, *size, size); |
-} |
- |
-// Tests the implementation of BSCBFeedData to feed data to the |
-// specified IBindStatusCallback |
-TEST_F(MonikerPatchTest, BSCBFeedData) { |
- CComObjectStackEx<MockBindStatusCallbackImpl> mock; |
- const char data[] = "ReadStreamCacheTest"; |
- const DWORD size = sizeof(data); |
- const CLIPFORMAT cf = 0xd0d0; |
- const DWORD flags = BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION; |
- const DWORD kArbitraryreadSize = 0xdeadbabe; |
- |
- char read_buffer1[size] = {0}, read_buffer2[size] = {0}; |
- DWORD read_size1 = size, read_size2 = kArbitraryreadSize; |
- HRESULT ret1 = E_FAIL, ret2 = E_FAIL; |
- |
- EXPECT_CALL(mock, OnDataAvailable(flags, size, |
- testing::Field(&FORMATETC::cfFormat, cf), |
- testing::Field(&STGMEDIUM::tymed, TYMED_ISTREAM))) |
- .WillOnce(testing::DoAll( |
- ReadStream(read_buffer1, &read_size1, &ret1), |
- ReadStream(read_buffer2, &read_size2, &ret2), |
- Return(S_OK))); |
- |
- EXPECT_HRESULT_SUCCEEDED(CacheStream::BSCBFeedData(&mock, data, size, cf, |
- flags, false)); |
- |
- EXPECT_HRESULT_SUCCEEDED(ret1); |
- EXPECT_STREQ(data, read_buffer1); |
- EXPECT_EQ(size, read_size1); |
- |
- EXPECT_EQ(E_PENDING, ret2); |
- EXPECT_STREQ("", read_buffer2); |
- EXPECT_EQ(kArbitraryreadSize, read_size2); |
-} |
- |
-const wchar_t kSmallHtmlMetaTag[] = L"sub_frame1.html"; |
-const wchar_t kSmallHtmlNoMetaTag[] = L"host_browser.html"; |
- |
-// Test various aspects of the SniffData class |
-TEST_F(MonikerPatchTest, SniffDataMetaTag) { |
- std::string small_html_meta_tag, small_html_no_meta_tag; |
- ASSERT_TRUE(ReadFileAsString(kSmallHtmlMetaTag, &small_html_meta_tag)); |
- ASSERT_TRUE(ReadFileAsString(kSmallHtmlNoMetaTag, &small_html_no_meta_tag)); |
- |
- base::win::ScopedComPtr<IStream> stream_with_meta, stream_no_meta; |
- ASSERT_TRUE(StringToStream(small_html_meta_tag, stream_with_meta.Receive())); |
- ASSERT_TRUE(StringToStream(small_html_no_meta_tag, |
- stream_no_meta.Receive())); |
- |
- // Initialize 2 sniffers 1 with meta tag and 1 without. |
- SniffData sniffer1, sniffer2; |
- EXPECT_HRESULT_SUCCEEDED(sniffer1.InitializeCache(std::wstring())); |
- EXPECT_HRESULT_SUCCEEDED(sniffer2.InitializeCache(std::wstring())); |
- EXPECT_HRESULT_SUCCEEDED(sniffer1.ReadIntoCache(stream_with_meta, true)); |
- EXPECT_HRESULT_SUCCEEDED(sniffer2.ReadIntoCache(stream_no_meta, true)); |
- |
- // Verify renderer type and size read. |
- EXPECT_TRUE(sniffer1.is_chrome()); |
- EXPECT_EQ(SniffData::OTHER, sniffer2.renderer_type()); |
- EXPECT_EQ(small_html_meta_tag.size(), sniffer1.size()); |
- EXPECT_EQ(small_html_no_meta_tag.size(), sniffer2.size()); |
-} |
- |
-// Now test how the data is fed back the the bind status callback. |
-// case 1: callback reads data in 1 read |
-TEST_F(MonikerPatchTest, SniffDataPlayback1) { |
- std::string small_html_meta_tag; |
- base::win::ScopedComPtr<IStream> stream_with_meta; |
- SniffData sniffer; |
- |
- EXPECT_HRESULT_SUCCEEDED(sniffer.InitializeCache(std::wstring())); |
- ASSERT_TRUE(ReadFileAsString(kSmallHtmlMetaTag, &small_html_meta_tag)); |
- ASSERT_TRUE(StringToStream(small_html_meta_tag, stream_with_meta.Receive())); |
- EXPECT_HRESULT_SUCCEEDED(sniffer.ReadIntoCache(stream_with_meta, true)); |
- |
- CComObjectStackEx<MockBindStatusCallbackImpl> mock; |
- const CLIPFORMAT cf = 0xd0d0; |
- const DWORD flags = BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION; |
- const DWORD data_size = small_html_meta_tag.size(); |
- |
- DWORD read_size1 = data_size * 2; |
- scoped_ptr<char[]> read_buffer1(new char[read_size1]); |
- ZeroMemory(read_buffer1.get(), read_size1); |
- |
- char read_buffer2[10] = {0}; |
- DWORD read_size2 = sizeof(read_buffer2); |
- HRESULT ret1 = E_FAIL, ret2 = E_FAIL; |
- |
- EXPECT_CALL(mock, OnDataAvailable(flags, data_size, |
- testing::Field(&FORMATETC::cfFormat, cf), |
- testing::Field(&STGMEDIUM::tymed, TYMED_ISTREAM))) |
- .WillOnce(testing::DoAll( |
- ReadStream(read_buffer1.get(), &read_size1, &ret1), |
- ReadStream(read_buffer2, &read_size2, &ret2), |
- Return(S_OK))); |
- |
- EXPECT_HRESULT_SUCCEEDED(sniffer.DrainCache(&mock, flags, cf)); |
- |
- EXPECT_HRESULT_SUCCEEDED(ret1); |
- EXPECT_EQ(small_html_meta_tag, read_buffer1.get()); |
- EXPECT_EQ(data_size, read_size1); |
- |
- EXPECT_EQ(S_FALSE, ret2); |
- EXPECT_STREQ("", read_buffer2); |
- EXPECT_EQ(sizeof(read_buffer2), read_size2); |
-} |
- |
-// case 2: callback reads data in 2 reads. |
-TEST_F(MonikerPatchTest, SniffDataPlayback2) { |
- std::string small_html_meta_tag; |
- base::win::ScopedComPtr<IStream> stream_with_meta; |
- SniffData sniffer; |
- |
- EXPECT_HRESULT_SUCCEEDED(sniffer.InitializeCache(std::wstring())); |
- ASSERT_TRUE(ReadFileAsString(kSmallHtmlMetaTag, &small_html_meta_tag)); |
- ASSERT_TRUE(StringToStream(small_html_meta_tag, stream_with_meta.Receive())); |
- EXPECT_HRESULT_SUCCEEDED(sniffer.ReadIntoCache(stream_with_meta, true)); |
- |
- CComObjectStackEx<MockBindStatusCallbackImpl> mock; |
- const CLIPFORMAT cf = 0xd0d0; |
- const DWORD flags = BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION; |
- const DWORD data_size = small_html_meta_tag.size(); |
- |
- DWORD read_size1 = data_size / 2; // First read is half the data. |
- DWORD read_size2 = data_size; // Second read, try to read past data. |
- scoped_ptr<char[]> read_buffer1(new char[read_size1]); |
- scoped_ptr<char[]> read_buffer2(new char[read_size2]); |
- ZeroMemory(read_buffer1.get(), read_size1); |
- ZeroMemory(read_buffer2.get(), read_size2); |
- |
- char read_buffer3[10] = {0}; |
- DWORD read_size3 = sizeof(read_buffer3); |
- HRESULT ret1 = E_FAIL, ret2 = E_FAIL, ret3 = E_FAIL; |
- |
- EXPECT_CALL(mock, OnDataAvailable(flags, data_size, |
- testing::Field(&FORMATETC::cfFormat, cf), |
- testing::Field(&STGMEDIUM::tymed, TYMED_ISTREAM))) |
- .WillOnce(testing::DoAll( |
- ReadStream(read_buffer1.get(), &read_size1, &ret1), |
- ReadStream(read_buffer2.get(), &read_size2, &ret2), |
- ReadStream(read_buffer3, &read_size3, &ret3), |
- Return(S_OK))); |
- |
- EXPECT_HRESULT_SUCCEEDED(sniffer.DrainCache(&mock, flags, cf)); |
- |
- EXPECT_HRESULT_SUCCEEDED(ret1); |
- EXPECT_HRESULT_SUCCEEDED(ret2); |
- EXPECT_EQ(data_size/2, read_size1); |
- EXPECT_EQ(data_size - read_size1, read_size2); |
- |
- std::string data_read; |
- data_read.append(read_buffer1.get(), read_size1); |
- data_read.append(read_buffer2.get(), read_size2); |
- EXPECT_EQ(small_html_meta_tag, data_read); |
- |
- EXPECT_EQ(S_FALSE, ret3); |
- EXPECT_STREQ("", read_buffer3); |
- EXPECT_EQ(sizeof(read_buffer3), read_size3); |
-} |