18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2006, The Android Open Source Project 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 163298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// TODO: change name to WebFrame.h 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 283d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#ifndef WebCoreFrameBridge_h 293d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#define WebCoreFrameBridge_h 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoaderClient.h" 32334e51bc2ff9bf7fc55fa67dc8a6d9257501a32eLeon Scroggins#include "PlatformBridge.h" 3345b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch#include "PlatformString.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WebCoreRefObject.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <jni.h> 36d4ff0cc91b5eb975d563f355f9f4c7358e0e2c06Iain Merrick#include <string> 3780e68b43c3da64848db8edc7d8e8fe095888e42eAndrei Popescu#include <wtf/RefCounted.h> 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 40e14e4cb809c2afcf51cce7775514d5e7820824f0Leon Scroggins class HTMLFormElement; 4120b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick class Frame; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class HistoryItem; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Image; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Page; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class RenderPart; 464de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins class RenderSkinAndroid; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class ResourceHandle; 4880e68b43c3da64848db8edc7d8e8fe095888e42eAndrei Popescu class ResourceLoaderAndroid; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class ResourceRequest; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace android { 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebViewCore; 55d4ff0cc91b5eb975d563f355f9f4c7358e0e2c06Iain Merrickclass WebUrlLoaderClient; 56ff1576a1bd6302d6c9988912d17e47f325242574Patrick Scottclass UrlInterceptResponse; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// one instance of WebFrame per Page for calling into Java's BrowserFrame 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebFrame : public WebCoreRefObject { 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame(JNIEnv* env, jobject obj, jobject historyList, WebCore::Page* page); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~WebFrame(); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // helper function 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static WebFrame* getWebFrame(const WebCore::Frame* frame); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 67ff1576a1bd6302d6c9988912d17e47f325242574Patrick Scott UrlInterceptResponse* shouldInterceptRequest(const WTF::String& url); 68ff1576a1bd6302d6c9988912d17e47f325242574Patrick Scott 6945b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch void reportError(int errorCode, const WTF::String& description, 7045b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch const WTF::String& failingUrl); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void loadStarted(WebCore::Frame* frame); 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void transitionToCommitted(WebCore::Frame* frame); 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void didFinishLoad(WebCore::Frame* frame); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void addHistoryItem(WebCore::HistoryItem* item); 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void removeHistoryItem(int index); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateHistoryIndex(int newIndex); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8445b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch void setTitle(const WTF::String& title); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void windowObjectCleared(WebCore::Frame* frame); 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8845b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch void setProgress(float newProgress); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9045b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch const WTF::String userAgentForURL(const WebCore::KURL* url); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void didReceiveIcon(WebCore::Image* icon); 93f1c0bbb9bf698154c206e842f94b72d277a96094Patrick Scott 9445b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch void didReceiveTouchIconURL(const WTF::String& url, bool precomposed); 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateVisitedHistory(const WebCore::KURL& url, bool reload); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 985498351dca14a6380ef3174a0afa0bb950b92d68Steve Block // Used to determine whether the WebView should handle the given request. 995498351dca14a6380ef3174a0afa0bb950b92d68Steve Block // Returns true if it should handle it, otherwise false. 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool canHandleRequest(const WebCore::ResourceRequest& request); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCore::Frame* createWindow(bool dialog, bool userGesture); 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void requestFocus() const; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void closeWindow(WebViewCore* webViewCore); 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void decidePolicyForFormResubmission(WebCore::FramePolicyFunction func); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11045b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch void setUserAgent(WTF::String userAgent) { mUserAgent = userAgent; } 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11245b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch WTF::String getRawResourceFilename(WebCore::PlatformBridge::rawResId) const; 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 114f10585d69aaccf4c1b021df143ee0f08e338cf31Grace Kloba float density() const; 115f10585d69aaccf4c1b021df143ee0f08e338cf31Grace Kloba 116b03ba594dfb7cae54557397a2a86b0a926da4685Ben Murdoch void didReceiveAuthenticationChallenge(WebUrlLoaderClient*, const std::string& host, const std::string& realm, bool useCachedCredentials, bool suppressDialog); 1170529319f6489e97cd51f1a497754c1e2a169ed41Huahui Wu void reportSslCertError(WebUrlLoaderClient* client, int cert_error, const std::string& cert, const std::string& url); 1186cf7e07ab895af6265850c3df2da05a09977e9a0Steve Block void requestClientCert(WebUrlLoaderClient* client, const std::string& hostAndPort); 119583f3b2e7b569ec9f88e9c481db1eb86a8c0224bIain Merrick void downloadStart(const std::string& url, const std::string& userAgent, const std::string& contentDisposition, const std::string& mimetype, long long contentLength); 1208576680967155ccad63175f913367b0682c8d43eHuahui Wu void didReceiveData(const char* data, int size); 1218576680967155ccad63175f913367b0682c8d43eHuahui Wu void didFinishLoading(); 12286e39ed5e93bcfd8d2868a0fcb955eb1e465bcaeSteve Block void setCertificate(const std::string& cert); 1238576680967155ccad63175f913367b0682c8d43eHuahui Wu 12420b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick void maybeSavePassword(WebCore::Frame* frame, const WebCore::ResourceRequest& request); 12520b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick 126e777e7663bb6cecc72754dbf56e068f5b6ea30d5Iain Merrick 1271ea5918bb6b1e9785844a506d6273b9a4520d520Patrick Scott // Parse the x-auto-login header and propagate the parameters to the 1281ea5918bb6b1e9785844a506d6273b9a4520d520Patrick Scott // application. 1291ea5918bb6b1e9785844a506d6273b9a4520d520Patrick Scott void autoLogin(const std::string& loginHeader); 1301ea5918bb6b1e9785844a506d6273b9a4520d520Patrick Scott 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCore::Page* page() const { return mPage; } 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 133f69429a9e93ec4396c01fe27171bcefd4d238342Patrick Scott // Currently used only by the chrome net stack. A similar field is used by 134f69429a9e93ec4396c01fe27171bcefd4d238342Patrick Scott // FrameLoader.java to block java network loads. 135f69429a9e93ec4396c01fe27171bcefd4d238342Patrick Scott void setBlockNetworkLoads(bool block) { mBlockNetworkLoads = block; } 136f69429a9e93ec4396c01fe27171bcefd4d238342Patrick Scott bool blockNetworkLoads() const { return mBlockNetworkLoads; } 137f69429a9e93ec4396c01fe27171bcefd4d238342Patrick Scott 13820b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick /** 13920b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick * Helper methods. These are typically chunks of code that are called in 14020b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick * slightly different ways by the Apache and Chrome HTTP stacks. 14120b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick */ 14220b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick bool getUsernamePasswordFromDom(WebCore::Frame* frame, WTF::String& username, WTF::String& password); 14320b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick jbyteArray getPostData(const WebCore::ResourceRequest& request); 14420b3d204269f6c234d3f154a074f351565aa67b3Iain Merrick 145e14e4cb809c2afcf51cce7775514d5e7820824f0Leon Scroggins bool shouldSaveFormData(); 146e14e4cb809c2afcf51cce7775514d5e7820824f0Leon Scroggins void saveFormData(WebCore::HTMLFormElement*); 147ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch WebCore::RenderSkinAndroid* renderSkins() const { return m_renderSkins; } 148ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch void setRenderSkins(WebCore::RenderSkinAndroid* skins) { m_renderSkins = skins; } 149d20466cbeb31c73eace8f0c4eb6c717b1e1ae540Shimeng (Simon) Wang 150d20466cbeb31c73eace8f0c4eb6c717b1e1ae540Shimeng (Simon) Wang // Convert a URL from potential punycode I18nDomainName to safe to-be-displayed Unicode. 151d20466cbeb31c73eace8f0c4eb6c717b1e1ae540Shimeng (Simon) Wang static WTF::String convertIDNToUnicode(const WebCore::KURL& kurl); 152d20466cbeb31c73eace8f0c4eb6c717b1e1ae540Shimeng (Simon) Wang 153d20466cbeb31c73eace8f0c4eb6c717b1e1ae540Shimeng (Simon) Wang private: 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project struct JavaBrowserFrame; 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JavaBrowserFrame* mJavaFrame; 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCore::Page* mPage; 15745b64f60af3cbfa8c78388e35e9b669a0c284bdcBen Murdoch WTF::String mUserAgent; 158f69429a9e93ec4396c01fe27171bcefd4d238342Patrick Scott bool mBlockNetworkLoads; 159ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch WebCore::RenderSkinAndroid* m_renderSkins; 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace android 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1643d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#endif // WebCoreFrameBridge_h 165