1 // Copyright 2015 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.
5 #include "base/memory/scoped_ptr.h"
6 #include "content/public/browser/stream_handle.h"
7 #include "content/public/browser/stream_info.h"
8 #include "extensions/browser/api/mime_handler_private/mime_handler_private.cc"
9 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
10 #include "testing/gtest/include/gtest/gtest.h"
12 namespace extensions
{
14 class TestStreamHandle
: public content::StreamHandle
{
16 TestStreamHandle() : url_("stream://url") {}
18 ~TestStreamHandle() override
{
19 while (!close_callbacks_
.empty()) {
20 close_callbacks_
.front().Run();
21 close_callbacks_
.pop();
25 const GURL
& GetURL() override
{ return url_
; }
27 void AddCloseListener(const base::Closure
& callback
) override
{
28 close_callbacks_
.push(callback
);
33 std::queue
<base::Closure
> close_callbacks_
;
36 class MimeHandlerServiceImplTest
: public testing::Test
{
38 void SetUp() override
{
39 scoped_ptr
<content::StreamInfo
> stream_info(new content::StreamInfo
);
40 stream_info
->handle
= make_scoped_ptr(new TestStreamHandle
);
41 stream_info
->mime_type
= "test/unit";
42 stream_info
->original_url
= GURL("test://extensions_unittests");
43 stream_container_
.reset(
44 new StreamContainer(stream_info
.Pass(), 1, true, GURL(), ""));
45 service_
.reset(new MimeHandlerServiceImpl(stream_container_
->GetWeakPtr()));
47 void TearDown() override
{
49 stream_container_
.reset();
52 void AbortCallback() { abort_called_
= true; }
53 void GetStreamInfoCallback(mime_handler::StreamInfoPtr stream_info
) {
54 stream_info_
= stream_info
.Pass();
57 scoped_ptr
<StreamContainer
> stream_container_
;
58 scoped_ptr
<mime_handler::MimeHandlerService
> service_
;
59 bool abort_called_
= false;
60 mime_handler::StreamInfoPtr stream_info_
;
63 TEST_F(MimeHandlerServiceImplTest
, Abort
) {
64 service_
->AbortStream(base::Bind(&MimeHandlerServiceImplTest::AbortCallback
,
65 base::Unretained(this)));
66 EXPECT_TRUE(abort_called_
);
68 abort_called_
= false;
69 service_
->AbortStream(base::Bind(&MimeHandlerServiceImplTest::AbortCallback
,
70 base::Unretained(this)));
71 EXPECT_TRUE(abort_called_
);
73 stream_container_
.reset();
74 abort_called_
= false;
75 service_
->AbortStream(base::Bind(&MimeHandlerServiceImplTest::AbortCallback
,
76 base::Unretained(this)));
77 EXPECT_TRUE(abort_called_
);
80 TEST_F(MimeHandlerServiceImplTest
, GetStreamInfo
) {
81 service_
->GetStreamInfo(
82 base::Bind(&MimeHandlerServiceImplTest::GetStreamInfoCallback
,
83 base::Unretained(this)));
84 ASSERT_TRUE(stream_info_
);
85 EXPECT_TRUE(stream_info_
->embedded
);
86 EXPECT_EQ(1, stream_info_
->tab_id
);
87 EXPECT_EQ("test/unit", stream_info_
->mime_type
);
88 EXPECT_EQ("test://extensions_unittests", stream_info_
->original_url
);
89 EXPECT_EQ("stream://url", stream_info_
->stream_url
);
91 service_
->AbortStream(base::Bind(&MimeHandlerServiceImplTest::AbortCallback
,
92 base::Unretained(this)));
93 EXPECT_TRUE(abort_called_
);
94 service_
->GetStreamInfo(
95 base::Bind(&MimeHandlerServiceImplTest::GetStreamInfoCallback
,
96 base::Unretained(this)));
97 ASSERT_FALSE(stream_info_
);
99 stream_container_
.reset();
100 service_
->GetStreamInfo(
101 base::Bind(&MimeHandlerServiceImplTest::GetStreamInfoCallback
,
102 base::Unretained(this)));
103 ASSERT_FALSE(stream_info_
);
106 } // namespace extensions