// 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 "content/browser/devtools/devtools_io_context.h" #include "base/bind.h" #include "base/sequenced_task_runner.h" #include "base/strings/string_number_conversions.h" #include "content/browser/blob_storage/chrome_blob_storage_context.h" #include "content/browser/devtools/devtools_stream_blob.h" #include "content/browser/devtools/devtools_stream_file.h" namespace content { DevToolsIOContext::Stream::Stream( scoped_refptr task_runner) : RefCountedDeleteOnSequence( std::move(task_runner)) {} std::string DevToolsIOContext::Stream::Register(DevToolsIOContext* context) { static unsigned s_last_stream_handle = 0; const std::string handle = base::UintToString(++s_last_stream_handle); Register(context, handle); return handle; } void DevToolsIOContext::Stream::Register(DevToolsIOContext* context, const std::string& handle) { context->RegisterStream(this, handle); } bool DevToolsIOContext::Stream::SupportsSeek() const { return true; } DevToolsIOContext::Stream::~Stream() = default; DevToolsIOContext::DevToolsIOContext() = default; DevToolsIOContext::~DevToolsIOContext() = default; void DevToolsIOContext::RegisterStream(scoped_refptr stream, const std::string& id) { bool inserted = streams_.emplace(id, std::move(stream)).second; DCHECK(inserted); } scoped_refptr DevToolsIOContext::GetByHandle( const std::string& handle) { auto it = streams_.find(handle); return it == streams_.end() ? nullptr : it->second; } bool DevToolsIOContext::Close(const std::string& handle) { size_t erased_count = streams_.erase(handle); return !!erased_count; } void DevToolsIOContext::DiscardAllStreams() { streams_.clear(); } // static bool DevToolsIOContext::IsTextMimeType(const std::string& mime_type) { static const char* kTextMIMETypePrefixes[] = { "text/", "application/x-javascript", "application/json", "application/xml"}; for (size_t i = 0; i < arraysize(kTextMIMETypePrefixes); ++i) { if (base::StartsWith(mime_type, kTextMIMETypePrefixes[i], base::CompareCase::INSENSITIVE_ASCII)) return true; } return false; } } // namespace content