diff options
9 files changed, 97 insertions, 23 deletions
diff --git a/Source/WebCore/bridge/jni/JavaMethodJobject.cpp b/Source/WebCore/bridge/jni/JavaMethodJobject.cpp index 5bb873d..73cae54 100644 --- a/Source/WebCore/bridge/jni/JavaMethodJobject.cpp +++ b/Source/WebCore/bridge/jni/JavaMethodJobject.cpp @@ -130,13 +130,11 @@ const char* JavaMethodJobject::signature() const appendClassName(signatureBuilder, javaClassName.data()); else { signatureBuilder.append(signatureFromJavaType(type)); -#if PLATFORM(ANDROID) && USE(V8) - // FIXME: Upstream to WebKit - // https://bugs.webkit.org/show_bug.cgi?id=62389 - if (type == JavaTypeObject || type == JavaTypeString) { -#else - if (type == JavaTypeObject) { + if (type == JavaTypeObject +#if USE(V8) + || type == JavaTypeString #endif + ) { appendClassName(signatureBuilder, javaClassName.data()); signatureBuilder.append(';'); } @@ -149,13 +147,11 @@ const char* JavaMethodJobject::signature() const appendClassName(signatureBuilder, returnType); else { signatureBuilder.append(signatureFromJavaType(m_returnType)); -#if PLATFORM(ANDROID) && USE(V8) - // FIXME: Upstream to WebKit - // https://bugs.webkit.org/show_bug.cgi?id=62389 - if (m_returnType == JavaTypeObject || m_returnType == JavaTypeString) { -#else - if (m_returnType == JavaTypeObject) { + if (m_returnType == JavaTypeObject +#if USE(V8) + || m_returnType == JavaTypeString #endif + ) { appendClassName(signatureBuilder, returnType); signatureBuilder.append(';'); } diff --git a/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp b/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp index 095ada7..a09eb35 100644 --- a/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp +++ b/Source/WebCore/platform/graphics/android/BaseLayerAndroid.cpp @@ -332,11 +332,12 @@ bool BaseLayerAndroid::drawGL(LayerAndroid* compositedRoot, compositedRoot->setScale(scale); #ifdef DEBUG - int size = compositedRoot->countTextureSize(); - int nbLayers = compositedRoot->nbLayers(); - XLOG("We are using %d Mb for %d layers", size / 1024 / 1024, nbLayers); - compositedRoot->showLayers(); + compositedRoot->showLayer(0); + XLOG("We have %d layers, %d textured", + compositedRoot->nbLayers(), + compositedRoot->nbTexturedLayers()); #endif + // Clean up GL textures for video layer. TilesManager::instance()->videoLayerManager()->deleteUnusedTextures(); diff --git a/Source/WebCore/platform/graphics/android/LayerAndroid.cpp b/Source/WebCore/platform/graphics/android/LayerAndroid.cpp index 947a0fc..05cb85e 100644 --- a/Source/WebCore/platform/graphics/android/LayerAndroid.cpp +++ b/Source/WebCore/platform/graphics/android/LayerAndroid.cpp @@ -659,6 +659,52 @@ IntRect LayerAndroid::clippedRect() const return rect; } +int LayerAndroid::nbLayers() +{ + int nb = 0; + int count = this->countChildren(); + for (int i = 0; i < count; i++) + nb += this->getChild(i)->nbLayers(); + return nb+1; +} + +int LayerAndroid::nbTexturedLayers() +{ + int nb = 0; + int count = this->countChildren(); + for (int i = 0; i < count; i++) + nb += this->getChild(i)->nbTexturedLayers(); + if (needsTexture()) + nb++; + return nb; +} + +void LayerAndroid::showLayer(int indent) +{ + char spaces[256]; + memset(spaces, 0, 256); + for (unsigned int i = 0; i < indent; i++) + spaces[i] = ' '; + + if (!indent) + XLOGC("\n\n--- LAYERS TREE ---"); + + IntRect r(0, 0, getWidth(), getHeight()); + IntRect tr = m_drawTransform.mapRect(r); + XLOGC("%s [%d:0x%x] - %s - (%d, %d, %d, %d) %s prepareContext(%d), pic w: %d h: %d", + spaces, uniqueId(), m_owningLayer, + needsTexture() ? "needs a texture" : "no texture", + tr.x(), tr.y(), tr.width(), tr.height(), + contentIsScrollable() ? "SCROLLABLE" : "", + prepareContext(), + m_recordingPicture ? m_recordingPicture->width() : -1, + m_recordingPicture ? m_recordingPicture->height() : -1); + + int count = this->countChildren(); + for (int i = 0; i < count; i++) + this->getChild(i)->showLayer(indent + 1); +} + void LayerAndroid::assignTexture(LayerAndroid* oldTree) { int count = this->countChildren(); diff --git a/Source/WebCore/platform/graphics/android/LayerAndroid.h b/Source/WebCore/platform/graphics/android/LayerAndroid.h index 15c7e0f..c4ed9fe 100644 --- a/Source/WebCore/platform/graphics/android/LayerAndroid.h +++ b/Source/WebCore/platform/graphics/android/LayerAndroid.h @@ -114,6 +114,11 @@ public: virtual bool needsTexture(); + // Debug helper methods + int nbLayers(); + int nbTexturedLayers(); + void showLayer(int indent); + void setScale(float scale); float getScale() { return m_scale; } virtual bool drawGL(GLWebViewState*, SkMatrix&); diff --git a/Source/WebCore/rendering/RenderBlockLineLayout.cpp b/Source/WebCore/rendering/RenderBlockLineLayout.cpp index 8eee581..d4e2aa3 100644 --- a/Source/WebCore/rendering/RenderBlockLineLayout.cpp +++ b/Source/WebCore/rendering/RenderBlockLineLayout.cpp @@ -780,7 +780,7 @@ void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogica doTextWrap = autowrap && !positioned && (fontSize <= lineHeight) && !style()->hasBackground() && (((dir == LTR && cssfloat != FRIGHT) || - (dir == RTL && cssfloat != FLEFT)) && + (dir == RTL && cssfloat != FNONE)) && ((ta == TAAUTO) || (ta == JUSTIFY) || ((ta == LEFT || ta == WEBKIT_LEFT) && (dir == LTR)) || ((ta == RIGHT || ta == WEBKIT_RIGHT) && (dir == RTL)))); diff --git a/Source/WebKit/android/WebCoreSupport/ChromiumIncludes.h b/Source/WebKit/android/WebCoreSupport/ChromiumIncludes.h index dac555f..9728aad 100644 --- a/Source/WebKit/android/WebCoreSupport/ChromiumIncludes.h +++ b/Source/WebKit/android/WebCoreSupport/ChromiumIncludes.h @@ -57,6 +57,7 @@ #include <base/threading/thread.h> #include <base/time.h> #include <base/tuple.h> +#include <base/utf_string_conversions.h> #include <chrome/browser/net/sqlite_persistent_cookie_store.h> #include <net/base/auth.h> #include <net/base/cert_verifier.h> @@ -68,6 +69,7 @@ #include <net/base/load_flags.h> #include <net/base/net_errors.h> #include <net/base/mime_util.h> +#include <net/base/net_util.h> #include <net/base/openssl_private_key_store.h> #include <net/base/ssl_cert_request_info.h> #include <net/base/ssl_config_service.h> diff --git a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp index 5ec4468..c08e629 100644 --- a/Source/WebKit/android/jni/WebCoreFrameBridge.cpp +++ b/Source/WebKit/android/jni/WebCoreFrameBridge.cpp @@ -550,6 +550,26 @@ WebFrame::reportError(int errorCode, const WTF::String& description, env->DeleteLocalRef(failUrl); } +WTF::String +WebFrame::convertIDNToUnicode(const WebCore::KURL& url) { + WTF::String converted = url.string(); +#if USE(CHROME_NETWORK_STACK) + const WTF::String host = url.host(); + if (host.find("xn--") == notFound) // no punycode IDN found. + return converted; + std::wstring languages; + const WTF::CString cHost = host.utf8(); + std::wstring result = net::IDNToUnicode(cHost.data(), cHost.length(), languages, 0); + const WTF::String convertedHost = String::fromUTF8(WideToUTF8(result).c_str()); + if (convertedHost.length() && convertedHost.length() != host.length()) { + WebCore::KURL newUrl = url; + newUrl.setHost(convertedHost); + converted = newUrl.string(); + } +#endif + return converted; +} + void WebFrame::loadStarted(WebCore::Frame* frame) { @@ -579,7 +599,7 @@ WebFrame::loadStarted(WebCore::Frame* frame) !isMainFrame)) return; - const WTF::String& urlString = url.string(); + const WTF::String urlString = convertIDNToUnicode(url); // If this is the main frame and we already have a favicon in the database, // send it along with the page started notification. jobject favicon = NULL; @@ -651,7 +671,7 @@ WebFrame::didFinishLoad(WebCore::Frame* frame) bool isMainFrame = (!frame->tree() || !frame->tree()->parent()); WebCore::FrameLoadType loadType = loader->loadType(); - const WTF::String& urlString = url.string(); + const WTF::String urlString = convertIDNToUnicode(url); jstring urlStr = wtfStringToJstring(env, urlString); env->CallVoidMethod(javaFrame.get(), mJavaFrame->mLoadFinished, urlStr, static_cast<int>(loadType), isMainFrame); checkException(env); @@ -800,7 +820,7 @@ WebFrame::updateVisitedHistory(const WebCore::KURL& url, bool reload) if (!javaFrame.get()) return; - const WTF::String& urlStr = url.string(); + const WTF::String urlStr = convertIDNToUnicode(url); jstring jUrlStr = wtfStringToJstring(env, urlStr); env->CallVoidMethod(javaFrame.get(), mJavaFrame->mUpdateVisitedHistory, jUrlStr, reload); diff --git a/Source/WebKit/android/jni/WebCoreFrameBridge.h b/Source/WebKit/android/jni/WebCoreFrameBridge.h index acf4eb4..0a8fe8b 100644 --- a/Source/WebKit/android/jni/WebCoreFrameBridge.h +++ b/Source/WebKit/android/jni/WebCoreFrameBridge.h @@ -160,7 +160,11 @@ class WebFrame : public WebCoreRefObject { void saveFormData(WebCore::HTMLFormElement*); const WebCore::RenderSkinAndroid* renderSkins() const { return m_renderSkins; } void setRenderSkins(const WebCore::RenderSkinAndroid* skins) { m_renderSkins = skins; } -private: + + // Convert a URL from potential punycode I18nDomainName to safe to-be-displayed Unicode. + static WTF::String convertIDNToUnicode(const WebCore::KURL& kurl); + + private: struct JavaBrowserFrame; JavaBrowserFrame* mJavaFrame; WebCore::Page* mPage; diff --git a/Source/WebKit/android/jni/WebHistory.cpp b/Source/WebKit/android/jni/WebHistory.cpp index c0a0906..7ec73a3 100644 --- a/Source/WebKit/android/jni/WebHistory.cpp +++ b/Source/WebKit/android/jni/WebHistory.cpp @@ -269,11 +269,11 @@ void WebHistoryItem::updateHistoryItem(WebCore::HistoryItem* item) { if (!realItem.get()) return; - const WTF::String& urlString = item->urlString(); + const WTF::String urlString = WebFrame::convertIDNToUnicode(item->url()); jstring urlStr = NULL; if (!urlString.isNull()) urlStr = wtfStringToJstring(env, urlString); - const WTF::String& originalUrlString = item->originalURLString(); + const WTF::String originalUrlString = WebFrame::convertIDNToUnicode(item->originalURL()); jstring originalUrlStr = NULL; if (!originalUrlString.isNull()) originalUrlStr = wtfStringToJstring(env, originalUrlString); |