Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2109)

Unified Diff: extensions/browser/api/mime_handler_private/mime_handler_private_unittest.cc

Issue 885563002: Fix a crash in MimeHandlerServiceImpl::AbortStream(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: GN Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/browser/api/mime_handler_private/mime_handler_private_unittest.cc
diff --git a/extensions/browser/api/mime_handler_private/mime_handler_private_unittest.cc b/extensions/browser/api/mime_handler_private/mime_handler_private_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5ef18513781d07bcce49700165468de521450178
--- /dev/null
+++ b/extensions/browser/api/mime_handler_private/mime_handler_private_unittest.cc
@@ -0,0 +1,106 @@
+// Copyright 2015 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 "base/memory/scoped_ptr.h"
+#include "content/public/browser/stream_handle.h"
+#include "content/public/browser/stream_info.h"
+#include "extensions/browser/api/mime_handler_private/mime_handler_private.cc"
+#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+class TestStreamHandle : public content::StreamHandle {
+ public:
+ TestStreamHandle() : url_("stream://url") {}
+
+ ~TestStreamHandle() override {
+ while (!close_callbacks_.empty()) {
+ close_callbacks_.front().Run();
+ close_callbacks_.pop();
+ }
+ }
+
+ const GURL& GetURL() override { return url_; }
+
+ void AddCloseListener(const base::Closure& callback) override {
+ close_callbacks_.push(callback);
+ }
+
+ private:
+ GURL url_;
+ std::queue<base::Closure> close_callbacks_;
+};
+
+class MimeHandlerServiceImplTest : public testing::Test {
+ public:
+ void SetUp() override {
+ scoped_ptr<content::StreamInfo> stream_info(new content::StreamInfo);
+ stream_info->handle = make_scoped_ptr(new TestStreamHandle);
+ stream_info->mime_type = "test/unit";
+ stream_info->original_url = GURL("test://extensions_unittests");
+ stream_container_.reset(
+ new StreamContainer(stream_info.Pass(), 1, true, GURL(), ""));
+ service_.reset(new MimeHandlerServiceImpl(stream_container_->GetWeakPtr()));
+ }
+ void TearDown() override {
+ service_.reset();
+ stream_container_.reset();
+ }
+
+ void AbortCallback() { abort_called_ = true; }
+ void GetStreamInfoCallback(mime_handler::StreamInfoPtr stream_info) {
+ stream_info_ = stream_info.Pass();
+ }
+
+ scoped_ptr<StreamContainer> stream_container_;
+ scoped_ptr<mime_handler::MimeHandlerService> service_;
+ bool abort_called_ = false;
+ mime_handler::StreamInfoPtr stream_info_;
+};
+
+TEST_F(MimeHandlerServiceImplTest, Abort) {
+ service_->AbortStream(base::Bind(&MimeHandlerServiceImplTest::AbortCallback,
+ base::Unretained(this)));
+ EXPECT_TRUE(abort_called_);
+
+ abort_called_ = false;
+ service_->AbortStream(base::Bind(&MimeHandlerServiceImplTest::AbortCallback,
+ base::Unretained(this)));
+ EXPECT_TRUE(abort_called_);
+
+ stream_container_.reset();
+ abort_called_ = false;
+ service_->AbortStream(base::Bind(&MimeHandlerServiceImplTest::AbortCallback,
+ base::Unretained(this)));
+ EXPECT_TRUE(abort_called_);
+}
+
+TEST_F(MimeHandlerServiceImplTest, GetStreamInfo) {
+ service_->GetStreamInfo(
+ base::Bind(&MimeHandlerServiceImplTest::GetStreamInfoCallback,
+ base::Unretained(this)));
+ ASSERT_TRUE(stream_info_);
+ EXPECT_TRUE(stream_info_->embedded);
+ EXPECT_EQ(1, stream_info_->tab_id);
+ EXPECT_EQ("test/unit", stream_info_->mime_type);
+ EXPECT_EQ("test://extensions_unittests", stream_info_->original_url);
+ EXPECT_EQ("stream://url", stream_info_->stream_url);
+
+ service_->AbortStream(base::Bind(&MimeHandlerServiceImplTest::AbortCallback,
+ base::Unretained(this)));
+ EXPECT_TRUE(abort_called_);
+ service_->GetStreamInfo(
+ base::Bind(&MimeHandlerServiceImplTest::GetStreamInfoCallback,
+ base::Unretained(this)));
+ ASSERT_FALSE(stream_info_);
+
+ stream_container_.reset();
+ service_->GetStreamInfo(
+ base::Bind(&MimeHandlerServiceImplTest::GetStreamInfoCallback,
+ base::Unretained(this)));
+ ASSERT_FALSE(stream_info_);
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698