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

Side by Side Diff: ios/web/web_state/ui/crw_ui_web_view_web_controller.mm

Issue 1458703004: Fixes document type detection on iOS 9. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git cl w Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/web/web_state/ui/crw_ui_web_view_web_controller.h" 5 #import "ios/web/web_state/ui/crw_ui_web_view_web_controller.h"
6 6
7 #import "base/ios/ios_util.h"
7 #import "base/ios/ns_error_util.h" 8 #import "base/ios/ns_error_util.h"
8 #import "base/ios/weak_nsobject.h" 9 #import "base/ios/weak_nsobject.h"
9 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
10 #include "base/json/string_escape.h" 11 #include "base/json/string_escape.h"
11 #include "base/mac/bind_objc_block.h" 12 #include "base/mac/bind_objc_block.h"
12 #import "base/mac/scoped_nsobject.h" 13 #import "base/mac/scoped_nsobject.h"
13 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
14 #include "base/metrics/field_trial.h" 15 #include "base/metrics/field_trial.h"
15 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
16 #include "base/strings/sys_string_conversions.h" 17 #include "base/strings/sys_string_conversions.h"
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 // The core.js cannot pass messages back to obj-c if it is injected 544 // The core.js cannot pass messages back to obj-c if it is injected
544 // to |WEB_VIEW_DOCUMENT| because it does not support iframe creation used 545 // to |WEB_VIEW_DOCUMENT| because it does not support iframe creation used
545 // by core.js to communicate back. That functionality is only supported 546 // by core.js to communicate back. That functionality is only supported
546 // by |WEB_VIEW_HTML_DOCUMENT|. |WEB_VIEW_DOCUMENT| is used when displaying 547 // by |WEB_VIEW_HTML_DOCUMENT|. |WEB_VIEW_DOCUMENT| is used when displaying
547 // non-HTML contents (e.g. PDF documents). 548 // non-HTML contents (e.g. PDF documents).
548 - (web::WebViewDocumentType)webViewDocumentType { 549 - (web::WebViewDocumentType)webViewDocumentType {
549 // This happens during tests. 550 // This happens during tests.
550 if (!_uiWebView) { 551 if (!_uiWebView) {
551 return web::WEB_VIEW_DOCUMENT_TYPE_GENERIC; 552 return web::WEB_VIEW_DOCUMENT_TYPE_GENERIC;
552 } 553 }
553 NSString* documentType = 554
554 [_uiWebView stringByEvaluatingJavaScriptFromString: 555 if (base::ios::IsRunningOnIOS9OrLater()) {
555 @"'' + document"]; 556 // On iOS 9, evaluating '' + document always results in [object
556 if ([documentType isEqualToString:@"[object HTMLDocument]"]) 557 // HTMLDocument], even for PDFs. However, document.contentType is properly
557 return web::WEB_VIEW_DOCUMENT_TYPE_HTML; 558 // defined.
558 else if ([documentType isEqualToString:@"[object Document]"]) 559 NSString* MIMEType = [_uiWebView
559 return web::WEB_VIEW_DOCUMENT_TYPE_GENERIC; 560 stringByEvaluatingJavaScriptFromString:@"document.contentType"];
561 return [self documentTypeFromMIMEType:MIMEType];
562 } else {
563 // On iOS 8 and below, document.contentType is always undefined. Use this
564 // instead.
565 NSString* documentType =
566 [_uiWebView stringByEvaluatingJavaScriptFromString:@"'' + document"];
567 if ([documentType isEqualToString:@"[object HTMLDocument]"])
568 return web::WEB_VIEW_DOCUMENT_TYPE_HTML;
569 else if ([documentType isEqualToString:@"[object Document]"])
570 return web::WEB_VIEW_DOCUMENT_TYPE_GENERIC;
571 }
572
560 return web::WEB_VIEW_DOCUMENT_TYPE_UNKNOWN; 573 return web::WEB_VIEW_DOCUMENT_TYPE_UNKNOWN;
561 } 574 }
562 575
563 - (void)loadRequest:(NSMutableURLRequest*)request { 576 - (void)loadRequest:(NSMutableURLRequest*)request {
564 DCHECK(web::GetWebClient()); 577 DCHECK(web::GetWebClient());
565 GURL requestURL = net::GURLWithNSURL(request.URL); 578 GURL requestURL = net::GURLWithNSURL(request.URL);
566 // If the request is for WebUI, add information to let the network stack 579 // If the request is for WebUI, add information to let the network stack
567 // access the requestGroupID. 580 // access the requestGroupID.
568 if (web::GetWebClient()->IsAppSpecificURL(requestURL)) { 581 if (web::GetWebClient()->IsAppSpecificURL(requestURL)) {
569 // Sub requests of a chrome:// page will not contain the user agent. 582 // Sub requests of a chrome:// page will not contain the user agent.
(...skipping 992 matching lines...) Expand 10 before | Expand all | Expand 10 after
1562 } 1575 }
1563 1576
1564 #pragma mark - 1577 #pragma mark -
1565 #pragma mark Testing methods 1578 #pragma mark Testing methods
1566 1579
1567 -(id<CRWRecurringTaskDelegate>)recurringTaskDelegate { 1580 -(id<CRWRecurringTaskDelegate>)recurringTaskDelegate {
1568 return _recurringTaskDelegate; 1581 return _recurringTaskDelegate;
1569 } 1582 }
1570 1583
1571 @end 1584 @end
OLDNEW
« no previous file with comments | « no previous file | ios/web/web_state/ui/crw_web_controller.mm » ('j') | ios/web/web_state/ui/crw_wk_web_view_web_controller.mm » ('J')

Powered by Google App Engine
This is Rietveld 408576698