Chromium Code Reviews| Index: chrome/renderer/chrome_render_view_observer.cc |
| diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc |
| index cfe0f83ba7da9b99aa1c1920d0114574523b9d2d..7765b2fa9fa048359ab1548f9583994e82c1acc2 100644 |
| --- a/chrome/renderer/chrome_render_view_observer.cc |
| +++ b/chrome/renderer/chrome_render_view_observer.cc |
| @@ -10,7 +10,7 @@ |
| #include "base/debug/trace_event.h" |
| #include "base/message_loop.h" |
| #include "base/metrics/histogram.h" |
| -#include "base/string_util.h" |
| +#include "base/utf_string_conversions.h" |
| #include "chrome/common/chrome_constants.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/common/prerender_messages.h" |
| @@ -40,6 +40,7 @@ |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebAccessibilityObject.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" |
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| @@ -48,6 +49,7 @@ |
| #include "ui/gfx/size.h" |
| #include "ui/gfx/skbitmap_operations.h" |
| #include "v8/include/v8-testing.h" |
| +#include "webkit/glue/dom_operations.h" |
| #include "webkit/glue/image_decoder.h" |
| #include "webkit/glue/multi_resolution_image_resource_fetcher.h" |
| #include "webkit/glue/webkit_glue.h" |
| @@ -56,6 +58,7 @@ using WebKit::WebAccessibilityObject; |
| using WebKit::WebCString; |
| using WebKit::WebDataSource; |
| using WebKit::WebDocument; |
| +using WebKit::WebElement; |
| using WebKit::WebFrame; |
| using WebKit::WebGestureEvent; |
| using WebKit::WebIconURL; |
| @@ -191,6 +194,19 @@ ChromeRenderViewObserver::ChromeRenderViewObserver( |
| ChromeRenderViewObserver::~ChromeRenderViewObserver() { |
| } |
| +// static |
| +bool ChromeRenderViewObserver::HasRefreshMetaTag(WebFrame* frame) { |
|
jochen (gone - plz use gerrit)
2013/05/02 14:00:31
why is this static?
|
| + if (!frame) |
| + return false; |
| + std::vector<WebElement> meta_elements; |
| + WebDocument document = frame->document(); |
| + webkit_glue::GetMetaElementsWithAttribute(&document, |
| + ASCIIToUTF16("http-equiv"), |
| + ASCIIToUTF16("refresh"), |
| + &meta_elements); |
| + return meta_elements.size() != 0; |
| +} |
| + |
| bool ChromeRenderViewObserver::OnMessageReceived(const IPC::Message& message) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(ChromeRenderViewObserver, message) |
| @@ -616,12 +632,6 @@ void ChromeRenderViewObserver::DidStartLoading() { |
| } |
| void ChromeRenderViewObserver::DidStopLoading() { |
| - CapturePageInfoLater( |
| - false, // preliminary_capture |
| - base::TimeDelta::FromMilliseconds( |
| - render_view()->GetContentStateImmediately() ? |
| - 0 : kDelayForCaptureMs)); |
| - |
| WebFrame* main_frame = render_view()->GetWebView()->mainFrame(); |
| GURL osd_url = main_frame->document().openSearchDescriptionURL(); |
| if (!osd_url.is_empty()) { |
| @@ -629,14 +639,27 @@ void ChromeRenderViewObserver::DidStopLoading() { |
| routing_id(), render_view()->GetPageId(), osd_url, |
| search_provider::AUTODETECTED_PROVIDER)); |
| } |
| + |
| + // Don't capture pages including refresh meta tag. |
| + if(HasRefreshMetaTag(main_frame)) |
| + return; |
| + |
| + CapturePageInfoLater( |
| + render_view()->GetPageId(), |
| + false, // preliminary_capture |
| + base::TimeDelta::FromMilliseconds( |
| + render_view()->GetContentStateImmediately() ? |
| + 0 : kDelayForCaptureMs)); |
| } |
| void ChromeRenderViewObserver::DidCommitProvisionalLoad( |
| WebFrame* frame, bool is_new_navigation) { |
| - if (!is_new_navigation) |
| + // Don't capture pages being not new, or including refresh meta tag. |
| + if (!is_new_navigation || HasRefreshMetaTag(frame)) |
| return; |
| CapturePageInfoLater( |
| + render_view()->GetPageId(), |
| true, // preliminary_capture |
| base::TimeDelta::FromMilliseconds(kDelayForForcedCaptureMs)); |
| } |
| @@ -661,19 +684,20 @@ void ChromeRenderViewObserver::DidHandleGestureEvent( |
| text_input_type != WebKit::WebTextInputTypeNone)); |
| } |
| -void ChromeRenderViewObserver::CapturePageInfoLater(bool preliminary_capture, |
| +void ChromeRenderViewObserver::CapturePageInfoLater(int page_id, |
| + bool preliminary_capture, |
| base::TimeDelta delay) { |
| capture_timer_.Start( |
| FROM_HERE, |
| delay, |
| base::Bind(&ChromeRenderViewObserver::CapturePageInfo, |
| base::Unretained(this), |
| + page_id, |
| preliminary_capture)); |
| } |
| -void ChromeRenderViewObserver::CapturePageInfo(bool preliminary_capture) { |
| - int page_id = render_view()->GetPageId(); |
| - |
| +void ChromeRenderViewObserver::CapturePageInfo(int page_id, |
| + bool preliminary_capture) { |
| if (!render_view()->GetWebView()) |
| return; |