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