| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "ios/chrome/browser/reading_list/reading_list_distiller_page.h" | 5 #include "ios/chrome/browser/reading_list/reading_list_distiller_page.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/mac/foundation_util.h" | 8 #include "base/mac/foundation_util.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "base/threading/thread_task_runner_handle.h" | 10 #include "base/threading/thread_task_runner_handle.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 ReadingListDistillerPageDelegate::ReadingListDistillerPageDelegate() {} | 46 ReadingListDistillerPageDelegate::ReadingListDistillerPageDelegate() {} |
| 47 ReadingListDistillerPageDelegate::~ReadingListDistillerPageDelegate() {} | 47 ReadingListDistillerPageDelegate::~ReadingListDistillerPageDelegate() {} |
| 48 | 48 |
| 49 ReadingListDistillerPage::ReadingListDistillerPage( | 49 ReadingListDistillerPage::ReadingListDistillerPage( |
| 50 web::BrowserState* browser_state, | 50 web::BrowserState* browser_state, |
| 51 FaviconWebStateDispatcher* web_state_dispatcher, | 51 FaviconWebStateDispatcher* web_state_dispatcher, |
| 52 ReadingListDistillerPageDelegate* delegate) | 52 ReadingListDistillerPageDelegate* delegate) |
| 53 : dom_distiller::DistillerPageIOS(browser_state), | 53 : dom_distiller::DistillerPageIOS(browser_state), |
| 54 web_state_dispatcher_(web_state_dispatcher), | 54 web_state_dispatcher_(web_state_dispatcher), |
| 55 delegate_(delegate), | 55 delegate_(delegate), |
| 56 delayed_task_id_(0), |
| 56 weak_ptr_factory_(this) { | 57 weak_ptr_factory_(this) { |
| 57 DCHECK(delegate); | 58 DCHECK(delegate); |
| 58 } | 59 } |
| 59 | 60 |
| 60 ReadingListDistillerPage::~ReadingListDistillerPage() {} | 61 ReadingListDistillerPage::~ReadingListDistillerPage() {} |
| 61 | 62 |
| 62 void ReadingListDistillerPage::DistillPageImpl(const GURL& url, | 63 void ReadingListDistillerPage::DistillPageImpl(const GURL& url, |
| 63 const std::string& script) { | 64 const std::string& script) { |
| 64 std::unique_ptr<web::WebState> old_web_state = DetachWebState(); | 65 std::unique_ptr<web::WebState> old_web_state = DetachWebState(); |
| 65 if (old_web_state) { | 66 if (old_web_state) { |
| 66 web_state_dispatcher_->ReturnWebState(std::move(old_web_state)); | 67 web_state_dispatcher_->ReturnWebState(std::move(old_web_state)); |
| 67 } | 68 } |
| 68 std::unique_ptr<web::WebState> new_web_state = | 69 std::unique_ptr<web::WebState> new_web_state = |
| 69 web_state_dispatcher_->RequestWebState(); | 70 web_state_dispatcher_->RequestWebState(); |
| 70 AttachWebState(std::move(new_web_state)); | 71 AttachWebState(std::move(new_web_state)); |
| 71 original_url_ = url; | 72 original_url_ = url; |
| 73 delayed_task_id_++; |
| 72 FetchFavicon(url); | 74 FetchFavicon(url); |
| 73 | 75 |
| 74 DistillerPageIOS::DistillPageImpl(url, script); | 76 DistillerPageIOS::DistillPageImpl(url, script); |
| 75 | 77 |
| 76 // WKWebView sets the document.hidden property to true and the | 78 // WKWebView sets the document.hidden property to true and the |
| 77 // document.visibilityState to prerender if the page is not added to a view | 79 // document.visibilityState to prerender if the page is not added to a view |
| 78 // hierarchy. Some pages may not render their content in these conditions. | 80 // hierarchy. Some pages may not render their content in these conditions. |
| 79 // Add the view and move it out of the screen far in the top left corner of | 81 // Add the view and move it out of the screen far in the top left corner of |
| 80 // the coordinate space. | 82 // the coordinate space. |
| 81 CGRect frame = [[[UIApplication sharedApplication] keyWindow] frame]; | 83 CGRect frame = [[[UIApplication sharedApplication] keyWindow] frame]; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 98 favicon_driver->FetchFavicon(page_url); | 100 favicon_driver->FetchFavicon(page_url); |
| 99 } | 101 } |
| 100 | 102 |
| 101 void ReadingListDistillerPage::OnDistillationDone(const GURL& page_url, | 103 void ReadingListDistillerPage::OnDistillationDone(const GURL& page_url, |
| 102 const base::Value* value) { | 104 const base::Value* value) { |
| 103 std::unique_ptr<web::WebState> old_web_state = DetachWebState(); | 105 std::unique_ptr<web::WebState> old_web_state = DetachWebState(); |
| 104 if (old_web_state) { | 106 if (old_web_state) { |
| 105 [old_web_state->GetView() removeFromSuperview]; | 107 [old_web_state->GetView() removeFromSuperview]; |
| 106 web_state_dispatcher_->ReturnWebState(std::move(old_web_state)); | 108 web_state_dispatcher_->ReturnWebState(std::move(old_web_state)); |
| 107 } | 109 } |
| 110 delayed_task_id_++; |
| 108 DistillerPageIOS::OnDistillationDone(page_url, value); | 111 DistillerPageIOS::OnDistillationDone(page_url, value); |
| 109 } | 112 } |
| 110 | 113 |
| 111 bool ReadingListDistillerPage::IsLoadingSuccess( | 114 bool ReadingListDistillerPage::IsLoadingSuccess( |
| 112 web::PageLoadCompletionStatus load_completion_status) { | 115 web::PageLoadCompletionStatus load_completion_status) { |
| 113 if (load_completion_status != web::PageLoadCompletionStatus::SUCCESS) { | 116 if (load_completion_status != web::PageLoadCompletionStatus::SUCCESS) { |
| 114 return false; | 117 return false; |
| 115 } | 118 } |
| 116 if (!CurrentWebState() || !CurrentWebState()->GetNavigationManager() || | 119 if (!CurrentWebState() || !CurrentWebState()->GetNavigationManager() || |
| 117 !CurrentWebState()->GetNavigationManager()->GetLastCommittedItem()) { | 120 !CurrentWebState()->GetNavigationManager()->GetLastCommittedItem()) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 DistillerPageIOS::OnLoadURLDone(load_completion_status); | 154 DistillerPageIOS::OnLoadURLDone(load_completion_status); |
| 152 return; | 155 return; |
| 153 } | 156 } |
| 154 FetchFavicon(CurrentWebState()->GetVisibleURL()); | 157 FetchFavicon(CurrentWebState()->GetVisibleURL()); |
| 155 | 158 |
| 156 // Page is loaded but rendering may not be done yet. Give a delay to the page. | 159 // Page is loaded but rendering may not be done yet. Give a delay to the page. |
| 157 base::WeakPtr<ReadingListDistillerPage> weak_this = | 160 base::WeakPtr<ReadingListDistillerPage> weak_this = |
| 158 weak_ptr_factory_.GetWeakPtr(); | 161 weak_ptr_factory_.GetWeakPtr(); |
| 159 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 162 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 160 FROM_HERE, | 163 FROM_HERE, |
| 161 base::Bind(&ReadingListDistillerPage::DelayedOnLoadURLDone, weak_this), | 164 base::Bind(&ReadingListDistillerPage::DelayedOnLoadURLDone, weak_this, |
| 165 delayed_task_id_), |
| 162 base::TimeDelta::FromSeconds(kPageLoadDelayInSeconds)); | 166 base::TimeDelta::FromSeconds(kPageLoadDelayInSeconds)); |
| 163 } | 167 } |
| 164 | 168 |
| 165 void ReadingListDistillerPage::DelayedOnLoadURLDone() { | 169 void ReadingListDistillerPage::DelayedOnLoadURLDone(int delayed_task_id) { |
| 170 if (!CurrentWebState() || delayed_task_id != delayed_task_id_) { |
| 171 // Something interrupted the distillation. |
| 172 // Abort here. |
| 173 return; |
| 174 } |
| 166 if (IsGoogleCachedAMPPage()) { | 175 if (IsGoogleCachedAMPPage()) { |
| 167 // Workaround for Google AMP pages. | 176 // Workaround for Google AMP pages. |
| 168 HandleGoogleCachedAMPPage(); | 177 HandleGoogleCachedAMPPage(); |
| 169 } else { | 178 } else { |
| 170 ContinuePageDistillation(); | 179 ContinuePageDistillation(); |
| 171 } | 180 } |
| 172 } | 181 } |
| 173 | 182 |
| 174 void ReadingListDistillerPage::ContinuePageDistillation() { | 183 void ReadingListDistillerPage::ContinuePageDistillation() { |
| 175 // The page is ready to be distilled. | 184 // The page is ready to be distilled. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 if (!new_gurl.is_valid()) { | 251 if (!new_gurl.is_valid()) { |
| 243 return false; | 252 return false; |
| 244 } | 253 } |
| 245 FetchFavicon(new_gurl); | 254 FetchFavicon(new_gurl); |
| 246 web::NavigationManager::WebLoadParams params(new_gurl); | 255 web::NavigationManager::WebLoadParams params(new_gurl); |
| 247 CurrentWebState()->GetNavigationManager()->LoadURLWithParams(params); | 256 CurrentWebState()->GetNavigationManager()->LoadURLWithParams(params); |
| 248 return true; | 257 return true; |
| 249 } | 258 } |
| 250 | 259 |
| 251 } // namespace reading_list | 260 } // namespace reading_list |
| OLD | NEW |