Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/renderer/render_view.h" | 5 #include "chrome/renderer/render_view.h" | 
| 6 | 6 | 
| 7 #include <algorithm> | 7 #include <algorithm> | 
| 8 #include <cmath> | 8 #include <cmath> | 
| 9 #include <string> | 9 #include <string> | 
| 10 #include <vector> | 10 #include <vector> | 
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 384 | 384 | 
| 385 // If the URL is still empty, this is a window.open navigation. Check the | 385 // If the URL is still empty, this is a window.open navigation. Check the | 
| 386 // opener's URL. | 386 // opener's URL. | 
| 387 GURL old_url(frame->url()); | 387 GURL old_url(frame->url()); | 
| 388 if (old_url.is_empty() && frame->opener()) | 388 if (old_url.is_empty() && frame->opener()) | 
| 389 old_url = frame->opener()->url(); | 389 old_url = frame->opener()->url(); | 
| 390 | 390 | 
| 391 return !ExtensionRendererInfo::InSameExtent(old_url, new_url); | 391 return !ExtensionRendererInfo::InSameExtent(old_url, new_url); | 
| 392 } | 392 } | 
| 393 | 393 | 
| 394 // Returns true if the frame is in an extension app's extent. | |
| 395 static bool InExtensionExtent(WebFrame* frame) { | |
| 396 if (!RenderThread::current()) | |
| 
 
darin (slow to review)
2010/12/14 17:17:40
what is the purpose of this null check?  i don't s
 
Charlie Reis
2010/12/14 18:52:29
We don't need this function anymore, but the same
 
 | |
| 397 return false; | |
| 398 | |
| 399 // If the URL is still empty, this is a window.open navigation. Check the | |
| 400 // opener's URL. | |
| 401 GURL old_url(frame->url()); | |
| 402 if (old_url.is_empty() && frame->opener()) | |
| 
 
darin (slow to review)
2010/12/14 17:17:40
Why do you bother checking frame->opener() here?
 
Charlie Reis
2010/12/14 18:52:29
No longer needed here, but still used in CrossesEx
 
 | |
| 403 old_url = frame->opener()->url(); | |
| 404 | |
| 405 return ExtensionRendererInfo::GetByURL(old_url) != NULL; | |
| 406 } | |
| 407 | |
| 394 // Returns the ISO 639_1 language code of the specified |text|, or 'unknown' | 408 // Returns the ISO 639_1 language code of the specified |text|, or 'unknown' | 
| 395 // if it failed. | 409 // if it failed. | 
| 396 static std::string DetermineTextLanguage(const string16& text) { | 410 static std::string DetermineTextLanguage(const string16& text) { | 
| 397 std::string language = chrome::kUnknownLanguageCode; | 411 std::string language = chrome::kUnknownLanguageCode; | 
| 398 int num_languages = 0; | 412 int num_languages = 0; | 
| 399 int text_bytes = 0; | 413 int text_bytes = 0; | 
| 400 bool is_reliable = false; | 414 bool is_reliable = false; | 
| 401 Language cld_language = | 415 Language cld_language = | 
| 402 DetectLanguageOfUnicodeText(NULL, text.c_str(), true, &is_reliable, | 416 DetectLanguageOfUnicodeText(NULL, text.c_str(), true, &is_reliable, | 
| 403 &num_languages, NULL, &text_bytes); | 417 &num_languages, NULL, &text_bytes); | 
| (...skipping 2590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2994 // We don't send referrer from extensions. | 3008 // We don't send referrer from extensions. | 
| 2995 OpenURL(url, GURL(), default_policy); | 3009 OpenURL(url, GURL(), default_policy); | 
| 2996 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. | 3010 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. | 
| 2997 } | 3011 } | 
| 2998 | 3012 | 
| 2999 // If the navigation would cross an app extent boundary, we also need | 3013 // If the navigation would cross an app extent boundary, we also need | 
| 3000 // to defer to the browser to ensure process isolation. | 3014 // to defer to the browser to ensure process isolation. | 
| 3001 // TODO(erikkay) This is happening inside of a check to is_content_initiated | 3015 // TODO(erikkay) This is happening inside of a check to is_content_initiated | 
| 3002 // which means that things like the back button won't trigger it. Is that | 3016 // which means that things like the back button won't trigger it. Is that | 
| 3003 // OK? | 3017 // OK? | 
| 3004 if (CrossesExtensionExtents(frame, url)) { | 3018 if (CrossesExtensionExtents(frame, url) && | 
| 3019 // Temporary workaround for crbug.com/65953: Only swap processes if we | |
| 
 
darin (slow to review)
2010/12/14 17:17:40
nit: Comments like this should have a TODO(creis)
 
Charlie Reis
2010/12/14 18:52:29
Done.
 
 | |
| 3020 // are not already in an app, and only if window.opener is null, since | |
| 3021 // we do not yet restore window.opener if the window navigates back to | |
| 3022 // this process later. | |
| 3023 !InExtensionExtent(frame) && | |
| 3024 frame->opener() == NULL) { | |
| 
 
darin (slow to review)
2010/12/14 17:17:40
style nit: prefer "!frame->opener()"
 
Charlie Reis
2010/12/14 18:52:29
Simplified by removing this part of the check and
 
 | |
| 3005 // Include the referrer in this case since we're going from a hosted web | 3025 // Include the referrer in this case since we're going from a hosted web | 
| 3006 // page. (the packaged case is handled previously by the extension | 3026 // page. (the packaged case is handled previously by the extension | 
| 3007 // navigation test) | 3027 // navigation test) | 
| 3008 GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer"))); | 3028 GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer"))); | 
| 3009 OpenURL(url, referrer, default_policy); | 3029 OpenURL(url, referrer, default_policy); | 
| 3010 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. | 3030 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. | 
| 3011 } | 3031 } | 
| 3012 } | 3032 } | 
| 3013 | 3033 | 
| 3014 // Detect when a page is "forking" a new tab that can be safely rendered in | 3034 // Detect when a page is "forking" a new tab that can be safely rendered in | 
| (...skipping 2713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5728 external_popup_menu_.reset(); | 5748 external_popup_menu_.reset(); | 
| 5729 } | 5749 } | 
| 5730 #endif | 5750 #endif | 
| 5731 | 5751 | 
| 5732 void RenderView::AddErrorToRootConsole(const string16& message) { | 5752 void RenderView::AddErrorToRootConsole(const string16& message) { | 
| 5733 if (webview() && webview()->mainFrame()) { | 5753 if (webview() && webview()->mainFrame()) { | 
| 5734 webview()->mainFrame()->addMessageToConsole( | 5754 webview()->mainFrame()->addMessageToConsole( | 
| 5735 WebConsoleMessage(WebConsoleMessage::LevelError, message)); | 5755 WebConsoleMessage(WebConsoleMessage::LevelError, message)); | 
| 5736 } | 5756 } | 
| 5737 } | 5757 } | 
| OLD | NEW |