All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.codename1.impl.javase.cef.RequestHandler Maven / Gradle / Ivy

There is a newer version: 7.0.175
Show newest version
// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.

package com.codename1.impl.javase.cef;

import com.codename1.ui.events.BrowserNavigationCallback;
import java.awt.Container;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.callback.CefAuthCallback;
import org.cef.callback.CefRequestCallback;
import org.cef.handler.CefLoadHandler.ErrorCode;
import org.cef.handler.CefRequestHandler;
import org.cef.handler.CefResourceHandler;
import org.cef.handler.CefResourceRequestHandler;
import org.cef.handler.CefResourceRequestHandlerAdapter;
import org.cef.misc.BoolRef;
import org.cef.network.CefPostData;
import org.cef.network.CefPostDataElement;
import org.cef.network.CefRequest;

import java.awt.Frame;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

//import tests.detailed.dialog.CertErrorDialog;
//import tests.detailed.dialog.PasswordDialog;

public class RequestHandler extends CefResourceRequestHandlerAdapter implements CefRequestHandler {
    private final WeakReference ownerRef;
    //private BrowserComponent browserComponent_;
    private final BrowserNavigationCallback navigationCallback_;
    

    public RequestHandler(Container owner, BrowserNavigationCallback navigationCallback) {
        ownerRef = new WeakReference(owner);
        this.navigationCallback_ = navigationCallback;
    }

    @Override
    public boolean onBeforeBrowse(CefBrowser browser, CefFrame frame, CefRequest request,
            boolean user_gesture, boolean is_redirect) {
        //BrowserNavigationCallback navigationCallback_ = navigationCallbackRef.get();
        if (navigationCallback_ != null) {
            
            boolean res = navigationCallback_.shouldNavigate(request.getURL());
            if (!res) {
                
                return res;
            }
        }
        
        CefPostData postData = request.getPostData();
        if (postData != null) {
            Vector elements = new Vector();
            postData.getElements(elements);
            for (CefPostDataElement el : elements) {
                int numBytes = el.getBytesCount();
                if (numBytes <= 0) continue;

                byte[] readBytes = new byte[numBytes];
                if (el.getBytes(numBytes, readBytes) <= 0) continue;

                String readString = new String(readBytes);
                if (readString.indexOf("ignore") > -1) {
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            Container owner_ = ownerRef.get();
                            if (owner_ != null) {
                                JOptionPane.showMessageDialog(owner_,
                                        "The request was rejected because you've entered \"ignore\" into the form.");
                            }
                        }
                    });
                    return true;
                }
            }
        }
        return false;
    }

    @Override
    public CefResourceRequestHandler getResourceRequestHandler(CefBrowser browser, CefFrame frame,
            CefRequest request, boolean isNavigation, boolean isDownload, String requestInitiator,
            BoolRef disableDefaultHandling) {
        return this;
    }

    @Override
    public boolean onBeforeResourceLoad(CefBrowser browser, CefFrame frame, CefRequest request) {
        // If you send a HTTP-POST request to http://www.google.com/
        // google rejects your request because they don't allow HTTP-POST.
        //
        // This test extracts the value of the test form.
        // (see "Show Form" entry within BrowserMenuBar)
        // and sends its value as HTTP-GET request to Google.
        
        if (request.getMethod().equalsIgnoreCase("POST")
                && request.getURL().equals("http://www.google.com/")) {
            String forwardTo = "http://www.google.com/#q=";
            CefPostData postData = request.getPostData();
            boolean sendAsGet = false;
            if (postData != null) {
                Vector elements = new Vector();
                postData.getElements(elements);
                for (CefPostDataElement el : elements) {
                    int numBytes = el.getBytesCount();
                    if (numBytes <= 0) continue;

                    byte[] readBytes = new byte[numBytes];
                    if (el.getBytes(numBytes, readBytes) <= 0) continue;

                    String readString = new String(readBytes).trim();
                    String[] stringPairs = readString.split("&");
                    for (String s : stringPairs) {
                        int startPos = s.indexOf('=');
                        if (s.startsWith("searchFor"))
                            forwardTo += s.substring(startPos + 1);
                        else if (s.startsWith("sendAsGet")) {
                            sendAsGet = true;
                        }
                    }
                }
                if (sendAsGet) postData.removeElements();
            }
            if (sendAsGet) {
                request.setFlags(0);
                request.setMethod("GET");
                request.setURL(forwardTo);
                request.setFirstPartyForCookies(forwardTo);
                HashMap headerMap = new HashMap();
                request.getHeaderMap(headerMap);
                headerMap.remove("Content-Type");
                headerMap.remove("Origin");
                request.setHeaderMap(headerMap);
            }
        }
        return false;
    }

    @Override
    public CefResourceHandler getResourceHandler(
            CefBrowser browser, CefFrame frame, CefRequest request) {
        // the non existing domain "foo.bar" is handled by the ResourceHandler implementation
        // E.g. if you try to load the URL http://www.foo.bar, you'll be forwarded
        // to the ResourceHandler class.
        if (request.getURL().startsWith("https://cn1app/")) {
            return new ResourceHandler();
        }

        if (request.getURL().endsWith("seterror.test/")) {
            return new ResourceSetErrorHandler();
        }

        return null;
    }

    @Override
    public boolean getAuthCredentials(CefBrowser browser, String origin_url, boolean isProxy,
            String host, int port, String realm, String scheme, CefAuthCallback callback) {
        //SwingUtilities.invokeLater(new PasswordDialog(owner_, callback));
        return true;
    }

    @Override
    public boolean onQuotaRequest(
            CefBrowser browser, String origin_url, long new_size, CefRequestCallback callback) {
        return false;
    }

    @Override
    public boolean onCertificateError(CefBrowser browser, ErrorCode cert_error, String request_url,
            CefRequestCallback callback) {
        //SwingUtilities.invokeLater(new CertErrorDialog(owner_, cert_error, request_url, callback));
        return true;
    }

    @Override
    public void onPluginCrashed(CefBrowser browser, String pluginPath) {
        System.out.println("Plugin " + pluginPath + "CRASHED");
    }

    @Override
    public void onRenderProcessTerminated(CefBrowser browser, TerminationStatus status) {
        System.out.println("render process terminated: " + status);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy