15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_ANDROID_WEB_CONTENTS_OBSERVER_ANDROID_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_ANDROID_WEB_CONTENTS_OBSERVER_ANDROID_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <jni.h>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_helper.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/process/kill.h"
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/browser/web_contents/web_contents_impl.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_observer.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/frame_navigate_params.h"
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewHost;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Extends WebContentsObserver for providing a public Java API for some of the
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the calls it receives.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContentsObserverAndroid : public WebContentsObserver {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContentsObserverAndroid(JNIEnv* env,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             jobject obj,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             WebContents* web_contents);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebContentsObserverAndroid();
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Destroy(JNIEnv* env, jobject obj);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void RenderProcessGone(
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      base::TerminationStatus termination_status) OVERRIDE;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidStartLoading(RenderViewHost* render_view_host) OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidStopLoading(RenderViewHost* render_view_host) OVERRIDE;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidFailProvisionalLoad(
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 frame_id,
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const base::string16& frame_unique_name,
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool is_main_frame,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& validated_url,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int error_code,
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const base::string16& error_description,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      RenderViewHost* render_view_host) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidFailLoad(int64 frame_id,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const GURL& validated_url,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           bool is_main_frame,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int error_code,
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                           const base::string16& error_description,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           RenderViewHost* render_view_host) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidNavigateMainFrame(const LoadCommittedDetails& details,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    const FrameNavigateParams& params) OVERRIDE;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidNavigateAnyFrame(const LoadCommittedDetails& details,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   const FrameNavigateParams& params) OVERRIDE;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidStartProvisionalLoadForFrame(
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 frame_id,
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 parent_frame_id,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool is_main_frame,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& validated_url,
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool is_error_page,
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool is_iframe_srcdoc,
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      RenderViewHost* render_view_host) OVERRIDE;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidCommitProvisionalLoadForFrame(
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int64 frame_id,
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const base::string16& frame_unique_name,
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      bool is_main_frame,
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& url,
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      PageTransition transition_type,
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      RenderViewHost* render_view_host) OVERRIDE;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidFinishLoad(int64 frame_id,
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             const GURL& validated_url,
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             bool is_main_frame,
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                             RenderViewHost* render_view_host) OVERRIDE;
764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void NavigationEntryCommitted(
774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      const LoadCommittedDetails& load_details) OVERRIDE;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void WebContentsDestroyed(WebContents* web_contents) OVERRIDE;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DidChangeVisibleSSLState() OVERRIDE;
80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void DidAttachInterstitialPage() OVERRIDE;
81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void DidDetachInterstitialPage() OVERRIDE;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidFailLoadInternal(bool is_provisional_load,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           bool is_main_frame,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int error_code,
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                           const base::string16& description,
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const GURL& url);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  JavaObjectWeakGlobalRef weak_java_observer_;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebContentsObserverAndroid);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RegisterWebContentsObserverAndroid(JNIEnv* env);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_BROWSER_ANDROID_WEB_CONTENTS_OBSERVER_ANDROID_H_
98