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

Unified Diff: components/webp_transcode/webp_network_client.mm

Issue 1860003003: Remove the WebPNetworkClient* from iOS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Build fix No. 2 Created 4 years, 8 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: components/webp_transcode/webp_network_client.mm
diff --git a/components/webp_transcode/webp_network_client.mm b/components/webp_transcode/webp_network_client.mm
deleted file mode 100644
index 9a9bd4043480b7ee04c5f1786f323fb1d02d8183..0000000000000000000000000000000000000000
--- a/components/webp_transcode/webp_network_client.mm
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright 2013 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.
-
-#import "components/webp_transcode/webp_network_client.h"
-
-#include <stddef.h>
-
-#include "base/bind.h"
-#include "base/compiler_specific.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/mac/bind_objc_block.h"
-#include "base/mac/scoped_nsobject.h"
-#include "base/sequenced_task_runner.h"
-#include "base/single_thread_task_runner.h"
-#include "base/strings/string_util.h"
-#include "base/strings/sys_string_conversions.h"
-#include "base/thread_task_runner_handle.h"
-#include "components/webp_transcode/webp_decoder.h"
-#include "net/base/net_errors.h"
-#include "net/http/http_request_headers.h"
-#include "net/url_request/url_request.h"
-
-namespace net {
-class URLRequest;
-}
-
-using namespace webp_transcode;
-
-namespace {
-
-// MIME type for WebP images.
-const char kWebPMimeType[] = "image/webp";
-NSString* const kNSWebPMimeType = @"image/webp";
-
-NSURLResponse* NewImageResponse(NSURLResponse* webp_response,
- size_t content_length,
- WebpDecoder::DecodedImageFormat format) {
- DCHECK(webp_response);
-
- NSString* mime_type = nil;
- switch (format) {
- case WebpDecoder::JPEG:
- mime_type = @"image/jpeg";
- break;
- case WebpDecoder::PNG:
- mime_type = @"image/png";
- break;
- case WebpDecoder::TIFF:
- mime_type = @"image/tiff";
- break;
- case WebpDecoder::DECODED_FORMAT_COUNT:
- NOTREACHED();
- break;
- }
- DCHECK(mime_type);
-
- if ([webp_response isKindOfClass:[NSHTTPURLResponse class]]) {
- NSHTTPURLResponse* http_response =
- static_cast<NSHTTPURLResponse*>(webp_response);
- NSMutableDictionary* header_fields = [NSMutableDictionary
- dictionaryWithDictionary:[http_response allHeaderFields]];
- [header_fields setObject:[NSString stringWithFormat:@"%zu", content_length]
- forKey:@"Content-Length"];
- [header_fields setObject:mime_type forKey:@"Content-Type"];
- return [[NSHTTPURLResponse alloc] initWithURL:[http_response URL]
- statusCode:[http_response statusCode]
- HTTPVersion:@"HTTP/1.1"
- headerFields:header_fields];
- } else {
- return [[NSURLResponse alloc] initWithURL:[webp_response URL]
- MIMEType:mime_type
- expectedContentLength:content_length
- textEncodingName:[webp_response textEncodingName]];
- }
-}
-
-class WebpDecoderDelegate : public WebpDecoder::Delegate {
- public:
- WebpDecoderDelegate(id<CRNNetworkClientProtocol> client,
- const base::Time& request_creation_time,
- const scoped_refptr<base::TaskRunner>& callback_runner)
- : underlying_client_([client retain]),
- callback_task_runner_(callback_runner),
- request_creation_time_(request_creation_time) {
- DCHECK(underlying_client_.get());
- }
-
- void SetOriginalResponse(
- const base::scoped_nsobject<NSURLResponse>& response) {
- original_response_.reset([response retain]);
- }
-
- // WebpDecoder::Delegate methods.
- void OnFinishedDecoding(bool success) override {
- base::scoped_nsprotocol<id<CRNNetworkClientProtocol>> block_client(
- [underlying_client_ retain]);
- if (success) {
- callback_task_runner_->PostTask(FROM_HERE, base::BindBlock(^{
- [block_client didFinishLoading];
- }));
- } else {
- DLOG(WARNING) << "WebP decoding failed "
- << base::SysNSStringToUTF8(
- [[original_response_ URL] absoluteString]);
- void (^errorBlock)(void) = ^{
- [block_client didFailWithNSErrorCode:NSURLErrorCannotDecodeContentData
- netErrorCode:net::ERR_CONTENT_DECODING_FAILED];
- };
- callback_task_runner_->PostTask(FROM_HERE, base::BindBlock(errorBlock));
- }
- }
-
- void SetImageFeatures(size_t total_size,
- WebpDecoder::DecodedImageFormat format) override {
- base::scoped_nsobject<NSURLResponse> imageResponse(
- NewImageResponse(original_response_, total_size, format));
- DCHECK(imageResponse);
- base::scoped_nsprotocol<id<CRNNetworkClientProtocol>> block_client(
- [underlying_client_ retain]);
- callback_task_runner_->PostTask(FROM_HERE, base::BindBlock(^{
- [block_client didReceiveResponse:imageResponse];
- }));
- }
-
- void OnDataDecoded(NSData* data) override {
- base::scoped_nsprotocol<id<CRNNetworkClientProtocol>> block_client(
- [underlying_client_ retain]);
- callback_task_runner_->PostTask(FROM_HERE, base::BindBlock(^{
- [block_client didLoadData:data];
- }));
- }
-
- private:
- ~WebpDecoderDelegate() override {}
-
- base::scoped_nsprotocol<id<CRNNetworkClientProtocol>> underlying_client_;
- base::scoped_nsobject<NSURLResponse> original_response_;
- scoped_refptr<base::TaskRunner> callback_task_runner_;
- base::Time request_creation_time_;
-};
-
-} // namespace
-
-@interface WebPNetworkClient () {
- scoped_refptr<webp_transcode::WebpDecoder> _webpDecoder;
- scoped_refptr<WebpDecoderDelegate> _webpDecoderDelegate;
- scoped_refptr<base::SequencedTaskRunner> _taskRunner;
- base::Time _requestCreationTime;
-}
-@end
-
-@implementation WebPNetworkClient
-
-- (instancetype)init {
- NOTREACHED() << "Use |-initWithTaskRunner:| instead";
- return nil;
-}
-
-- (instancetype)initWithTaskRunner:
- (const scoped_refptr<base::SequencedTaskRunner>&)runner {
- if (self = [super init]) {
- DCHECK(runner);
- _taskRunner = runner;
- }
- return self;
-}
-
-- (void)didCreateNativeRequest:(net::URLRequest*)nativeRequest {
- // Append 'image/webp' to the outgoing 'Accept' header.
- const net::HttpRequestHeaders& headers =
- nativeRequest->extra_request_headers();
- std::string acceptHeader;
- if (headers.GetHeader("Accept", &acceptHeader)) {
- // Add 'image/webp' if it isn't in the Accept header yet.
- if (acceptHeader.find(kWebPMimeType) == std::string::npos) {
- acceptHeader += std::string(",") + kWebPMimeType;
- nativeRequest->SetExtraRequestHeaderByName("Accept", acceptHeader, true);
- }
- } else {
- // All requests should already have an Accept: header, so this case
- // should never happen outside of unit tests.
- nativeRequest->SetExtraRequestHeaderByName("Accept", kWebPMimeType, false);
- }
- [super didCreateNativeRequest:nativeRequest];
-}
-
-- (void)didLoadData:(NSData*)data {
- if (_webpDecoder.get()) {
- // |data| is assumed to be immutable.
- base::scoped_nsobject<NSData> scopedData([data retain]);
- _taskRunner->PostTask(FROM_HERE, base::Bind(&WebpDecoder::OnDataReceived,
- _webpDecoder, scopedData));
- } else {
- [super didLoadData:data];
- }
-}
-
-- (void)didReceiveResponse:(NSURLResponse*)response {
- DCHECK(self.underlyingClient);
- NSString* responseMimeType = [response MIMEType];
- if (responseMimeType &&
- [responseMimeType caseInsensitiveCompare:kNSWebPMimeType] ==
- NSOrderedSame) {
- _webpDecoderDelegate =
- new WebpDecoderDelegate(self.underlyingClient, _requestCreationTime,
- base::ThreadTaskRunnerHandle::Get());
- _webpDecoder = new webp_transcode::WebpDecoder(_webpDecoderDelegate.get());
- base::scoped_nsobject<NSURLResponse> scoped_response([response copy]);
- _taskRunner->PostTask(FROM_HERE,
- base::Bind(&WebpDecoderDelegate::SetOriginalResponse,
- _webpDecoderDelegate, scoped_response));
- // Do not call super here, the WebpDecoderDelegate will update the mime type
- // and call |-didReceiveResponse:|.
- } else {
- // If this isn't a WebP, pass the call up the chain.
- [super didReceiveResponse:response];
- }
-}
-
-- (void)didFinishLoading {
- if (_webpDecoder.get()) {
- _taskRunner->PostTask(FROM_HERE,
- base::Bind(&WebpDecoder::Stop, _webpDecoder));
- } else {
- [super didFinishLoading];
- }
-}
-
-@end
« no previous file with comments | « components/webp_transcode/webp_network_client.h ('k') | components/webp_transcode/webp_network_client_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698