Commit c2d96fa8 authored by grt's avatar grt Committed by Commit bot

Revert of [Android WebView] Synthesize a fake page loading event on page...

Revert of [Android WebView] Synthesize a fake page loading event on page source modification (patchset #8 id:140001 of https://codereview.chromium.org/924833003/)

Reason for revert:
Reverting to see if this caused AwContentsClientFullScreenTest#testPowerSaveBlockerIsTransferredToFullscreen failure here: http://crbug.com/462213.

Original issue's description:
> [Android WebView] Synthesize a fake page loading event on page source modification
>
> When a script modifies page source of a non-committed page, we need to
> notify clients, so they can update the URL bar to avoid confusion.
>
> BUG=458569
>
> Committed: https://crrev.com/e38bb6cdeb1170cb2cd7faae8507dc6c34c58c7d
> Cr-Commit-Position: refs/heads/master@{#318222}

TBR=torne@chromium.org,tedchoc@chromium.org,davidben@chromium.org,creis@chromium.org,mnaganov@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=458569

Review URL: https://codereview.chromium.org/958933002

Cr-Commit-Position: refs/heads/master@{#318231}
parent 49001892
......@@ -1239,19 +1239,6 @@ public class AwContents implements SmartClipProvider,
return url;
}
/**
* Gets the last committed URL. It represents the current page that is
* displayed in WebContents. It represents the current security context.
*
* @return The URL of the current page or null if it's empty.
*/
public String getLastCommittedUrl() {
if (isDestroyed()) return null;
String url = mWebContents.getLastCommittedUrl();
if (url == null || url.trim().isEmpty()) return null;
return url;
}
public void requestFocus() {
mAwViewMethods.requestFocus();
}
......@@ -1844,11 +1831,6 @@ public class AwContents implements SmartClipProvider,
return ports;
}
public boolean hasAccessedInitialDocument() {
if (isDestroyed()) return false;
return mWebContents.hasAccessedInitialDocument();
}
//--------------------------------------------------------------------------------------------
// View and ViewGroup method implementations
//--------------------------------------------------------------------------------------------
......
......@@ -37,8 +37,4 @@ public abstract class AwWebContentsDelegate extends WebContentsDelegateAndroid {
// Call in response to a prior runFileChooser call.
protected static native void nativeFilesSelectedInChooser(int processId, int renderId,
int modeFlags, String[] filePath, String[] displayName);
@Override
@CalledByNative
public abstract void navigationStateChanged(int flags);
}
......@@ -11,7 +11,6 @@ import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
......@@ -20,7 +19,6 @@ import android.webkit.ValueCallback;
import org.chromium.base.ContentUriUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.content_public.browser.InvalidateTypes;
/**
* Adapts the AwWebContentsDelegate interface to the AwContentsClient interface.
......@@ -214,20 +212,6 @@ class AwWebContentsDelegateAdapter extends AwWebContentsDelegate {
mContentsClient.onRequestFocus();
}
@Override
public void navigationStateChanged(int flags) {
if ((flags & InvalidateTypes.URL) != 0 && mAwContents.hasAccessedInitialDocument()) {
// Hint the client to show the last committed url, as it may be unsafe to show
// the pending entry.
String url = mAwContents.getLastCommittedUrl();
url = TextUtils.isEmpty(url) ? "about:blank" : url;
mContentsClient.onPageStarted(url);
mContentsClient.onLoadResource(url);
mContentsClient.onProgressChanged(100);
mContentsClient.onPageFinished(url);
}
}
@Override
public void toggleFullscreenModeForTab(boolean enterFullscreen) {
if (enterFullscreen) {
......
......@@ -55,7 +55,6 @@ $(call intermediates-dir-for,GYP,shared)/enums/console_message_level_java/org/ch
$(call intermediates-dir-for,GYP,shared)/enums/content_gamepad_mapping/org/chromium/content/browser/input/CanonicalAxisIndex.java \
$(call intermediates-dir-for,GYP,shared)/enums/content_gamepad_mapping/org/chromium/content/browser/input/CanonicalButtonIndex.java \
$(call intermediates-dir-for,GYP,shared)/enums/gesture_event_type_java/org/chromium/content/browser/GestureEventType.java \
$(call intermediates-dir-for,GYP,shared)/enums/invalidate_types_java/org/chromium/content_public/browser/InvalidateTypes.java \
$(call intermediates-dir-for,GYP,shared)/enums/navigation_controller_java/org/chromium/content_public/browser/navigation_controller/LoadURLType.java \
$(call intermediates-dir-for,GYP,shared)/enums/navigation_controller_java/org/chromium/content_public/browser/navigation_controller/UserAgentOverrideOption.java \
$(call intermediates-dir-for,GYP,shared)/enums/popup_item_type_java/org/chromium/content/browser/input/PopupItemType.java \
......
......@@ -5,14 +5,13 @@
package org.chromium.android_webview.test;
import android.os.Build;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.test.util.AwTestTouchUtils;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.content.browser.test.util.TestCallbackHelperContainer;
import org.chromium.net.test.util.TestWebServer;
import java.util.concurrent.Callable;
......@@ -39,9 +38,6 @@ public class PopupWindowTest extends AwTestBase {
mParentContentsClient = new TestAwContentsClient();
mParentContainerView = createAwTestContainerViewOnMainSync(mParentContentsClient);
mParentContents = mParentContainerView.getAwContents();
mPopupContentsClient = new TestAwContentsClient();
mPopupContainerView = createAwTestContainerViewOnMainSync(mPopupContentsClient);
mPopupContents = mPopupContainerView.getAwContents();
mWebServer = TestWebServer.start();
}
......@@ -53,9 +49,7 @@ public class PopupWindowTest extends AwTestBase {
super.tearDown();
}
// It is expected that the parent page contains a link that opens a popup window,
// and the test server is already pre-loaded with both parent and popup pages.
private void triggerPopup(String parentUrl) throws Throwable {
private void triggerPopup() throws Throwable {
enableJavaScriptOnUiThread(mParentContents);
getInstrumentation().runOnMainSync(new Runnable() {
@Override
......@@ -65,6 +59,21 @@ public class PopupWindowTest extends AwTestBase {
}
});
final String popupPath = "/popup.html";
final String parentPageHtml = CommonResources.makeHtmlPageFrom("",
"<script>"
+ "function tryOpenWindow() {"
+ " var newWindow = window.open('" + popupPath + "');"
+ "}</script>"
+ "<a class=\"full_view\" onclick=\"tryOpenWindow();\">Click me!</a>");
final String popupPageHtml = CommonResources.makeHtmlPageFrom(
"<title>" + POPUP_TITLE + "</title>",
"This is a popup window");
final String parentUrl = mWebServer.setResponse("/popupParent.html", parentPageHtml, null);
mWebServer.setResponse(popupPath, popupPageHtml, null);
mParentContentsClient.getOnCreateWindowHelper().setReturnValue(true);
loadUrlSync(mParentContents,
mParentContentsClient.getOnPageFinishedHelper(),
......@@ -79,6 +88,10 @@ public class PopupWindowTest extends AwTestBase {
}
private void connectPendingPopup() throws Exception {
mPopupContentsClient = new TestAwContentsClient();
mPopupContainerView = createAwTestContainerViewOnMainSync(mPopupContentsClient);
mPopupContents = mPopupContainerView.getAwContents();
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
......@@ -87,22 +100,10 @@ public class PopupWindowTest extends AwTestBase {
});
}
@MediumTest
@SmallTest
@Feature({"AndroidWebView"})
public void testPopupWindow() throws Throwable {
final String popupPath = "/popup.html";
final String parentPageHtml = CommonResources.makeHtmlPageFrom("",
"<script>"
+ "function tryOpenWindow() {"
+ " var newWindow = window.open('" + popupPath + "');"
+ "}</script>"
+ "<a class=\"full_view\" onclick=\"tryOpenWindow();\">Click me!</a>");
final String popupPageHtml = CommonResources.makeHtmlPageFrom(
"<title>" + POPUP_TITLE + "</title>",
"This is a popup window");
final String parentUrl = mWebServer.setResponse("/popupParent.html", parentPageHtml, null);
mWebServer.setResponse(popupPath, popupPageHtml, null);
triggerPopup(parentUrl);
triggerPopup();
connectPendingPopup();
poll(new Callable<Boolean>() {
@Override
......@@ -111,33 +112,4 @@ public class PopupWindowTest extends AwTestBase {
}
});
}
@MediumTest
@Feature({"AndroidWebView"})
public void testOnPageFinishedCalledAfterModifyingPageSource() throws Throwable {
final String popupPath = "/popup.html";
final String popupUrl = mWebServer.setResponseWithNoContentStatus(popupPath);
final String parentHtml = CommonResources.makeHtmlPageFrom("",
"<script>"
+ "function tryOpenWindow() {"
+ " window.popupWindow = window.open('" + popupPath + "');"
+ "}"
+ "function modifyDomOfPopup() {"
+ " window.popupWindow.document.body.innerHTML = 'Hello from the parent!';"
+ "}</script>"
+ "<a class='full_view' onclick='tryOpenWindow();'>Click me!</a>");
final String parentUrl = mWebServer.setResponse("/parent.html", parentHtml, null);
triggerPopup(parentUrl);
TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper =
mPopupContentsClient.getOnPageFinishedHelper();
int onPageFinishedCallCount = onPageFinishedHelper.getCallCount();
connectPendingPopup();
onPageFinishedHelper.waitForCallback(onPageFinishedCallCount);
onPageFinishedCallCount = onPageFinishedHelper.getCallCount();
executeJavaScriptAndWaitForResult(mParentContents, mParentContentsClient,
"modifyDomOfPopup()");
onPageFinishedHelper.waitForCallback(onPageFinishedCallCount);
assertEquals("about:blank", onPageFinishedHelper.getUrl());
}
}
......@@ -23,7 +23,6 @@
'../content/content.gyp:console_message_level_java',
'../content/content.gyp:content_gamepad_mapping',
'../content/content.gyp:gesture_event_type_java',
'../content/content.gyp:invalidate_types_java',
'../content/content.gyp:navigation_controller_java',
'../content/content.gyp:popup_item_type_java',
'../content/content.gyp:result_codes_java',
......
......@@ -163,18 +163,6 @@ void AwWebContentsDelegate::AddNewContents(WebContents* source,
}
}
void AwWebContentsDelegate::NavigationStateChanged(
content::WebContents* source,
content::InvalidateTypes changed_flags) {
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jobject> java_delegate = GetJavaDelegate(env);
if (java_delegate.obj()) {
Java_AwWebContentsDelegate_navigationStateChanged(env, java_delegate.obj(),
changed_flags);
}
}
// Notifies the delegate about the creation of a new WebContents. This
// typically happens when popups are created.
void AwWebContentsDelegate::WebContentsCreated(
......
......@@ -40,8 +40,6 @@ class AwWebContentsDelegate
bool user_gesture,
bool* was_blocked) override;
void NavigationStateChanged(content::WebContents* source,
content::InvalidateTypes changed_flags) override;
void WebContentsCreated(content::WebContents* source_contents,
int opener_render_frame_id,
const base::string16& frame_name,
......
......@@ -49,7 +49,6 @@ import org.chromium.content.browser.ContentView;
import org.chromium.content.browser.ContentViewClient;
import org.chromium.content.browser.ContentViewCore;
import org.chromium.content.browser.WebContentsObserver;
import org.chromium.content_public.browser.InvalidateTypes;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.Referrer;
......@@ -388,10 +387,10 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
@Override
public void navigationStateChanged(int flags) {
if ((flags & InvalidateTypes.TITLE) != 0) {
if ((flags & INVALIDATE_TYPE_TITLE) != 0) {
for (TabObserver observer : mObservers) observer.onTitleUpdated(Tab.this);
}
if ((flags & InvalidateTypes.URL) != 0) {
if ((flags & INVALIDATE_TYPE_URL) != 0) {
for (TabObserver observer : mObservers) observer.onUrlUpdated(Tab.this);
}
}
......
......@@ -8,7 +8,6 @@ import android.view.KeyEvent;
import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
import org.chromium.content_public.browser.InvalidateTypes;
import org.chromium.content_public.browser.WebContents;
/**
......@@ -26,8 +25,16 @@ public class WebContentsDelegateAndroid {
// Equivalent of WebCore::WebConsoleMessage::LevelError.
public static final int LOG_LEVEL_ERROR = 3;
// TODO(mnaganov): Remove after getting rid of downstream usages.
public static final int INVALIDATE_TYPE_TAB = InvalidateTypes.TAB;
// Flags passed to the WebContentsDelegateAndroid.navigationStateChanged to tell it
// what has changed. Should match the values in invalidate_type.h.
// Equivalent of InvalidateTypes::INVALIDATE_TYPE_URL.
public static final int INVALIDATE_TYPE_URL = 1 << 0;
// Equivalent of InvalidateTypes::INVALIDATE_TYPE_TAB.
public static final int INVALIDATE_TYPE_TAB = 1 << 1;
// Equivalent of InvalidateTypes::INVALIDATE_TYPE_LOAD.
public static final int INVALIDATE_TYPE_LOAD = 1 << 2;
// Equivalent of InvalidateTypes::INVALIDATE_TYPE_TITLE.
public static final int INVALIDATE_TYPE_TITLE = 1 << 3;
// The most recent load progress callback received from WebContents, as a percentage.
// Initialize to 100 to indicate that we're not in a loading state.
......
......@@ -170,14 +170,6 @@ ScopedJavaLocalRef<jstring> WebContentsAndroid::GetURL(JNIEnv* env,
return ConvertUTF8ToJavaString(env, web_contents_->GetURL().spec());
}
ScopedJavaLocalRef<jstring> WebContentsAndroid::GetLastCommittedURL(
JNIEnv* env,
jobject) const {
return ConvertUTF8ToJavaString(env,
web_contents_->GetLastCommittedURL().spec());
}
jboolean WebContentsAndroid::IsIncognito(JNIEnv* env, jobject obj) {
return web_contents_->GetBrowserContext()->IsOffTheRecord();
}
......@@ -488,11 +480,4 @@ void WebContentsAndroid::AddMessageToDevToolsConsole(JNIEnv* env,
ConvertJavaStringToUTF8(env, message)));
}
jboolean WebContentsAndroid::HasAccessedInitialDocument(
JNIEnv* env,
jobject jobj) {
return static_cast<content::WebContentsImpl*>(web_contents_)->
HasAccessedInitialDocument();
}
} // namespace content
......@@ -50,8 +50,6 @@ class CONTENT_EXPORT WebContentsAndroid
void Stop(JNIEnv* env, jobject obj);
jint GetBackgroundColor(JNIEnv* env, jobject obj);
base::android::ScopedJavaLocalRef<jstring> GetURL(JNIEnv* env, jobject) const;
base::android::ScopedJavaLocalRef<jstring> GetLastCommittedURL(JNIEnv* env,
jobject) const;
jboolean IsIncognito(JNIEnv* env, jobject obj);
void ResumeResponseDeferredAtStart(JNIEnv* env, jobject obj);
......@@ -111,8 +109,6 @@ class CONTENT_EXPORT WebContentsAndroid
jint level,
jstring message);
jboolean HasAccessedInitialDocument(JNIEnv* env, jobject jobj);
private:
RenderWidgetHostViewAndroid* GetRenderWidgetHostViewAndroid();
......
......@@ -443,7 +443,6 @@
'content_strings_grd',
'content_gamepad_mapping',
'gesture_event_type_java',
'invalidate_types_java',
'navigation_controller_java',
'popup_item_type_java',
'result_codes_java',
......@@ -495,14 +494,6 @@
},
'includes': [ '../build/android/java_cpp_enum.gypi' ],
},
{
'target_name': 'invalidate_types_java',
'type': 'none',
'variables': {
'source_file': 'public/browser/invalidate_type.h',
},
'includes': [ '../build/android/java_cpp_enum.gypi' ],
},
{
'target_name': 'navigation_controller_java',
'type': 'none',
......
......@@ -110,7 +110,6 @@ java_cpp_enum("content_public_android_java_enums_srcjar") {
"//content/browser/android/content_view_core_impl.cc",
"//content/browser/android/gesture_event_type.h",
"//content/browser/gamepad/gamepad_standard_mappings.h",
"//content/public/browser/invalidate_type.h",
"//content/public/browser/navigation_controller.h",
"//content/public/common/console_message_level.h",
"//content/public/common/result_codes.h",
......@@ -123,7 +122,6 @@ java_cpp_enum("content_public_android_java_enums_srcjar") {
"org/chromium/content/browser/input/CanonicalAxisIndex.java",
"org/chromium/content/browser/input/CanonicalButtonIndex.java",
"org/chromium/content/browser/input/PopupItemType.java",
"org/chromium/content_public/browser/InvalidateTypes.java",
"org/chromium/content_public/browser/navigation_controller/LoadURLType.java",
"org/chromium/content_public/browser/navigation_controller/UserAgentOverrideOption.java",
"org/chromium/content_public/common/ConsoleMessageLevel.java",
......
......@@ -165,11 +165,6 @@ import org.chromium.content_public.browser.WebContents;
return nativeGetURL(mNativeWebContentsAndroid);
}
@Override
public String getLastCommittedUrl() {
return nativeGetLastCommittedURL(mNativeWebContentsAndroid);
}
@Override
public boolean isIncognito() {
return nativeIsIncognito(mNativeWebContentsAndroid);
......@@ -301,11 +296,6 @@ import org.chromium.content_public.browser.WebContents;
nativeAddMessageToDevToolsConsole(mNativeWebContentsAndroid, level, message);
}
@Override
public boolean hasAccessedInitialDocument() {
return nativeHasAccessedInitialDocument(mNativeWebContentsAndroid);
}
@CalledByNative
private static void onEvaluateJavaScriptResult(
String jsonResult, JavaScriptCallback callback) {
......@@ -338,7 +328,6 @@ import org.chromium.content_public.browser.WebContents;
private native void nativeScrollFocusedEditableNodeIntoView(long nativeWebContentsAndroid);
private native void nativeSelectWordAroundCaret(long nativeWebContentsAndroid);
private native String nativeGetURL(long nativeWebContentsAndroid);
private native String nativeGetLastCommittedURL(long nativeWebContentsAndroid);
private native boolean nativeIsIncognito(long nativeWebContentsAndroid);
private native void nativeResumeResponseDeferredAtStart(long nativeWebContentsAndroid);
private native void nativeSetHasPendingNavigationTransitionForTesting(
......@@ -358,6 +347,4 @@ import org.chromium.content_public.browser.WebContents;
String script, JavaScriptCallback callback);
private native void nativeAddMessageToDevToolsConsole(
long nativeWebContentsAndroid, int level, String message);
private native boolean nativeHasAccessedInitialDocument(
long nativeWebContentsAndroid);
}
......@@ -138,14 +138,6 @@ public interface WebContents {
*/
public String getUrl();
/**
* Gets the last committed URL. It represents the current page that is
* displayed in this WebContents. It represents the current security context.
*
* @return The last committed URL.
*/
public String getLastCommittedUrl();
/**
* Get the InCognito state of WebContents.
*
......@@ -221,12 +213,4 @@ public interface WebContents {
* org.chromium.content_public.common.ConsoleMessageLevel.
*/
public void addMessageToDevToolsConsole(int level, String message);
/**
* Returns whether the initial empty page has been accessed by a script from another
* page. Always false after the first commit.
*
* @return Whether the initial empty page has been accessed by a script.
*/
public boolean hasAccessedInitialDocument();
}
......@@ -9,11 +9,6 @@ namespace content {
// Flags passed to the WebContentsDelegate.NavigationStateChanged to tell it
// what has changed. Combine them to update more than one thing.
//
// A Java counterpart will be generated for this enum.
// GENERATED_JAVA_ENUM_PACKAGE: (
// org.chromium.content_public.browser)
// GENERATED_JAVA_PREFIX_TO_STRIP: INVALIDATE_TYPE_
enum InvalidateTypes {
INVALIDATE_TYPE_URL = 1 << 0, // The URL has changed.
INVALIDATE_TYPE_TAB = 1 << 1, // The favicon, app icon, or crashed
......
......@@ -80,14 +80,11 @@ public class TestWebServer {
final boolean mIsRedirect;
final Runnable mResponseAction;
final boolean mIsNotFound;
final boolean mIsNoContent;
Response(byte[] responseData, List<Pair<String, String>> responseHeaders,
boolean isRedirect, boolean isNotFound, boolean isNoContent,
Runnable responseAction) {
boolean isRedirect, boolean isNotFound, Runnable responseAction) {
mIsRedirect = isRedirect;
mIsNotFound = isNotFound;
mIsNoContent = isNoContent;
mResponseData = responseData;
mResponseHeaders = responseHeaders == null
? new ArrayList<Pair<String, String>>() : responseHeaders;
......@@ -211,7 +208,6 @@ public class TestWebServer {
private static final int RESPONSE_STATUS_NORMAL = 0;
private static final int RESPONSE_STATUS_MOVED_TEMPORARILY = 1;
private static final int RESPONSE_STATUS_NOT_FOUND = 2;
private static final int RESPONSE_STATUS_NO_CONTENT = 3;
private String setResponseInternal(
String requestPath, byte[] responseData,
......@@ -219,12 +215,10 @@ public class TestWebServer {
int status) {
final boolean isRedirect = (status == RESPONSE_STATUS_MOVED_TEMPORARILY);
final boolean isNotFound = (status == RESPONSE_STATUS_NOT_FOUND);
final boolean isNoContent = (status == RESPONSE_STATUS_NO_CONTENT);
synchronized (mLock) {
mResponseMap.put(requestPath, new Response(
responseData, responseHeaders, isRedirect, isNotFound, isNoContent,
responseAction));
responseData, responseHeaders, isRedirect, isNotFound, responseAction));
mResponseCountMap.put(requestPath, Integer.valueOf(0));
mLastRequestMap.put(requestPath, null);
}
......@@ -256,19 +250,6 @@ public class TestWebServer {
RESPONSE_STATUS_NOT_FOUND);
}
/**
* Sets a 204 (no content) response to be returned when a particular request path is passed in.
*
* @param requestPath The path to respond to.
* @return The full URL including the path that should be requested to get the expected
* response.
*/
public String setResponseWithNoContentStatus(
String requestPath) {
return setResponseInternal(requestPath, "".getBytes(), null, null,
RESPONSE_STATUS_NO_CONTENT);
}
/**
* Sets a response to be returned when a particular request path is passed
* in (with the option to specify additional headers).
......@@ -470,10 +451,6 @@ public class TestWebServer {
} else if (response.mIsNotFound) {
httpResponse = createResponse(HttpStatus.SC_NOT_FOUND);
servedResponseFor(path, request);
} else if (response.mIsNoContent) {
httpResponse = createResponse(HttpStatus.SC_NO_CONTENT);
httpResponse.setHeader("Content-Length", "0");
servedResponseFor(path, request);
} else if (response.mIsRedirect) {
httpResponse = createResponse(HttpStatus.SC_MOVED_TEMPORARILY);
for (Pair<String, String> header : response.mResponseHeaders) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment