diff --git a/COPYING b/COPYING
new file mode 100644
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/Graphics/UI/Gtk/WebKit/Download.chs b/Graphics/UI/Gtk/WebKit/Download.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/Download.chs
@@ -0,0 +1,286 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.Download
+--  Author 		:  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+-- 
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Object used to communicate with the application when downloading 
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.Download (
+-- * Types
+  Download,
+
+-- * Enums
+  DownloadError(..),
+  DownloadStatus(..),
+
+-- * Constructors
+  downloadNew,
+
+-- * Methods
+  downloadStart,
+  downloadCancel,
+  downloadGetUri,
+  downloadGetNetworkRequest,
+  downloadGetSuggestedFilename,
+  downloadGetDestinationUri,
+  downloadGetProgress,
+  downloadGetElapsedTime,
+  downloadGetTotalSize,
+  downloadGetCurrentSize,
+  downloadGetStatus,
+  downloadSetDestinationUri,
+
+-- * Attributes
+  currentSize,
+  destinationUri,
+  networkRequest,
+  networkResponse,
+  progress,
+  status,
+  suggestedFilename,
+  totalSize,
+
+-- * Signals
+  downloadError,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import System.Glib.Attributes
+import System.Glib.Properties
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import Graphics.UI.Gtk.WebKit.Signals#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- * Enums
+
+{#enum DownloadError {underscoreToCase}#}
+{#enum DownloadStatus {underscoreToCase}#}
+
+
+------------------
+-- Constructors
+
+
+-- | Create a new 'Download' instance for the given 'NetworkRequest'
+--
+-- Object used to communicate with the application when downloading.
+downloadNew :: NetworkRequestClass request => request -> IO Download
+downloadNew nr = 
+    makeNewGObject mkDownload $ {#call download_new#} (toNetworkRequest nr)
+
+-- | Initiates the 'Download'.
+--
+-- Notice that you must have set the destination-uri property before
+-- calling this function.
+downloadStart::
+    DownloadClass self => self
+ -> IO()
+downloadStart dl =
+    {#call download_start#} (toDownload dl)
+
+-- | Cancels the 'Download'.
+downloadCancel::
+    DownloadClass self => self
+ -> IO()
+downloadCancel dl =
+    {#call download_cancel#} (toDownload dl)
+
+-- | Retrieves the URI from 'Download' which is being downloaded.
+downloadGetUri::
+    DownloadClass self => self
+ -> IO (Maybe String) -- ^ the uri or @Nothing@ in case of failed
+downloadGetUri dl = 
+    {#call download_get_uri#} (toDownload dl)
+    >>= maybePeek peekCString
+
+-- | Retrieves the 'NetworkRequest' that backs the download process.
+downloadGetNetworkRequest :: 
+    DownloadClass self => self
+ -> IO NetworkRequest
+downloadGetNetworkRequest dl =
+    makeNewGObject mkNetworkRequest $ {#call download_get_network_request#} (toDownload dl)
+
+-- | Retrieves the filename that was suggested by the server,
+-- or the one derived from the URI.
+downloadGetSuggestedFilename :: 
+    DownloadClass self => self
+ -> IO (Maybe String) -- ^ the suggested filename or @Nothing@ in case of failed
+downloadGetSuggestedFilename dl =
+    {#call download_get_suggested_filename#} (toDownload dl) >>= maybePeek peekCString
+
+-- | Obtains the URI to which the downloaded file will be written.
+--
+-- It is set by Application before call 'downloadStart' 
+downloadGetDestinationUri :: 
+    DownloadClass self => self
+ -> IO (Maybe String)
+downloadGetDestinationUri dl =
+    {#call download_get_destination_uri#} (toDownload dl) >>= maybePeek peekCString
+
+-- | Defines the URI that should be used to save the downloaded file to.
+downloadSetDestinationUri :: 
+    DownloadClass self => self
+ -> String  -- ^ @destination_uri@ - the destination URI
+ -> IO()
+downloadSetDestinationUri dl dest =
+    withCString dest $ \destPtr ->
+        {#call download_set_destination_uri#} (toDownload dl) destPtr
+
+-- |Determines the current progress of the 'Download'
+downloadGetProgress :: 
+    DownloadClass self => self
+ -> IO Double -- ^ a 'Double' ranging from 0.0 to 1.0
+downloadGetProgress dl =
+    liftM realToFrac $ {#call download_get_progress#} (toDownload dl)
+
+-- |Return elapsed time for the 'Download' in seconds.
+-- includeing any fractional part.
+--
+-- If the 'Download' is finished, had an error or was cancelled,
+-- this is the time between its start and the event.
+downloadGetElapsedTime ::
+    DownloadClass self => self
+ -> IO Double -- ^ seconds since the 'Download' was started.
+downloadGetElapsedTime dl =
+    liftM realToFrac $ {#call download_get_elapsed_time#} (toDownload dl)
+
+-- |Returns the excepted total size of the download.
+--
+-- This is expected because the server may provide incorrect or missing
+-- Content-Length. 
+--
+-- Notice that this may grow over time.
+downloadGetTotalSize :: 
+    DownloadClass self => self
+ -> IO Int -- ^ the expected total size of the downloaded file.
+downloadGetTotalSize dl =
+    liftM fromIntegral $ {#call download_get_total_size#} (toDownload dl)
+
+-- | Returns the current already downleaded size
+downloadGetCurrentSize :: 
+    DownloadClass self => self
+ -> IO Int -- ^ the already downloaded size.
+downloadGetCurrentSize dl =
+    liftM fromIntegral $ {#call download_get_current_size#} (toDownload dl)
+
+-- | Obtains the current status of the 'Download' as 'DownloadStatus'
+downloadGetStatus :: 
+    DownloadClass self => self
+ -> IO DownloadStatus -- ^ the current 'DownloadStatus'
+downloadGetStatus dl = 
+    liftM (toEnum . fromIntegral) $ {#call download_get_status#} (toDownload dl)
+
+-- * Attibutes
+
+-- | The length of the data already downloaded
+--
+-- Default value: 0
+-- 
+-- * Since 1.1.2 
+--
+currentSize :: DownloadClass self => ReadAttr self Int
+currentSize = readAttr downloadGetCurrentSize
+
+-- | The URI of the save location for this download.
+--
+-- Default value: \"\"
+--
+-- * Since 1.1.2
+destinationUri :: DownloadClass self => Attr self (Maybe String) 
+destinationUri = newAttrFromMaybeStringProperty "destination-uri"
+
+-- | The NetworkRequest instance associated with the download.
+--
+-- * Since 1.1.2
+networkRequest :: DownloadClass self => Attr self NetworkRequest
+networkRequest = 
+  newAttrFromObjectProperty "network-request"
+  {#call pure webkit_network_request_get_type#}
+
+-- | The NetworkResponse instance associated with the download.
+--
+-- * Since 1.1.16
+networkResponse :: DownloadClass self => Attr self NetworkResponse
+networkResponse = 
+  newAttrFromObjectProperty "network-response"
+  {#call pure webkit_network_response_get_type#}
+
+-- | Determines the current progress of the download. 
+-- Notice that, although the progress changes are reported as soon as possible, 
+-- the emission of the notify signal for this property is throttled, for the benefit of download managers. 
+-- If you care about every update, use 'Download' : currentSize.
+--
+-- Allowed values: [0,1]
+--
+-- Default value: 1
+--
+-- * Since 1.1.2
+progress :: DownloadClass self => ReadAttr self Double
+progress = readAttr downloadGetProgress
+
+-- | Determines the current status of the download.
+--
+-- Default value: 'DownloadStatusCreated'
+--
+-- * Since 1.1.2
+status :: DownloadClass self => ReadAttr self DownloadStatus
+status = readAttr downloadGetStatus
+
+-- | The file name suggested as default when saving
+--
+-- Default value: \"\"
+--
+-- * Since 1.1.2
+suggestedFilename :: DownloadClass self => ReadAttr self (Maybe String)
+suggestedFilename = readAttr downloadGetSuggestedFilename
+
+-- | The total size of the file
+--
+-- Default value: 0
+--
+-- * Since 1.1.2
+totalSize :: DownloadClass self => ReadAttr self Int
+totalSize = readAttr downloadGetTotalSize
+
+-- * Signals
+
+-- | Emitted when download is interrupted either by user action or by network errors, 
+-- errorDetail will take any value of 'DownloadError'.
+--
+-- 'download':    the object on which the signal is emitted                  
+-- 'errorCode':   the corresponding error code                               
+-- 'errorDetail': detailed error code for the error, see 'DownloadError' 
+-- 'reason':       a string describing the error                              
+--                                                                          
+-- Since 1.1.2
+downloadError :: DownloadClass self => Signal self (Int -> Int -> String -> IO Bool)
+downloadError = Signal (connect_INT_INT_STRING__BOOL "error")
diff --git a/Graphics/UI/Gtk/WebKit/HitTestResult.chs b/Graphics/UI/Gtk/WebKit/HitTestResult.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/HitTestResult.chs
@@ -0,0 +1,47 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.HitTestResult
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit Web Resource
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.HitTestResult (
+-- * Types
+  HitTestResult,
+
+-- * Enums.
+  HitTestResultContext(..),
+) where
+
+import System.Glib.FFI
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- * Enums.
+
+{#enum HitTestResultContext {underscoreToCase}#}
diff --git a/Graphics/UI/Gtk/WebKit/Internal.chs b/Graphics/UI/Gtk/WebKit/Internal.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/Internal.chs
@@ -0,0 +1,65 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.Internal
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit Internal
+--
+-- This module contain some functions for help binding Webkit.
+--
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.Internal (
+-- * Methods
+-- Below functions just help binding use in internal.
+-- Don't call those functions in your code.
+  connect_OBJECT__OBJECTPTR,
+  webViewToWebViewPtr,
+) where
+
+import System.Glib.FFI
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import Graphics.UI.Gtk.WebKit.Signals#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- | Signal helper functions.
+connect_OBJECT__OBJECTPTR ::
+    (GObjectClass a', GObjectClass obj) => SignalName ->
+    ConnectAfter -> obj ->
+    (a' -> IO WebView) ->
+    IO (ConnectId obj)
+connect_OBJECT__OBJECTPTR signal after obj user =
+    connectGeneric signal after obj action
+        where action :: Ptr GObject -> Ptr GObject -> IO (Ptr WebView)
+              action _ obj1  =
+                  failOnGError $
+                  makeNewGObject mkGObject (return obj1) >>= \obj1' ->
+                  user (unsafeCastGObject obj1') >>= webViewToWebViewPtr
+
+-- | Internal helper function for convert.
+webViewToWebViewPtr :: WebViewClass self => self -> IO (Ptr WebView)
+webViewToWebViewPtr webview = return $ unsafeForeignPtrToPtr (unWebView (toWebView webview))
diff --git a/Graphics/UI/Gtk/WebKit/NetworkRequest.chs b/Graphics/UI/Gtk/WebKit/NetworkRequest.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/NetworkRequest.chs
@@ -0,0 +1,91 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.NetworkRequest
+--  Author      :  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- The target of a navigation request
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.NetworkRequest (
+-- * Types
+  NetworkRequest,
+
+-- * Constructors
+  networkRequestNew,
+
+-- * Methods
+  networkRequestSetUri,
+  networkRequestGetUri,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+------------------
+-- Constructors
+
+
+
+-- | Create a new NetworkRequest with the given @uri@.
+-- 
+-- It is used whenever WebKit wants to provide information 
+-- about a request that will be sent, or has been sent.
+networkRequestNew :: 
+    String  -- ^ @uri@ - the uri of the request
+ -> IO NetworkRequest
+networkRequestNew uri = 
+    withCString uri $ \uriPtr -> 
+      constructNewGObject mkNetworkRequest $ 
+        {#call network_request_new#} uriPtr
+
+
+-- | Set the URI of 'NetworkRequest'.
+--
+networkRequestSetUri :: 
+    NetworkRequestClass self => self 
+ -> String  -- ^ @uri@ - the uri will be set to the request.
+ -> IO()
+networkRequestSetUri networkrequest uri =
+    withCString uri $ \uriPtr -> 
+      {#call network_request_set_uri#} 
+        (toNetworkRequest networkrequest)
+        uriPtr
+
+
+-- | Return the uri of 'NetworkRequest'.
+networkRequestGetUri :: 
+    NetworkRequestClass self => self 
+ -> IO (Maybe String) -- ^ the URI or @Nothing@ in case failed.
+networkRequestGetUri networkrequest = 
+    {#call network_request_get_uri#} 
+      (toNetworkRequest networkrequest) >>= 
+      maybePeek peekCString
+
diff --git a/Graphics/UI/Gtk/WebKit/NetworkResponse.chs b/Graphics/UI/Gtk/WebKit/NetworkResponse.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/NetworkResponse.chs
@@ -0,0 +1,73 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.NetworkResponse
+--  Author      :  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- The response given to a network request
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.NetworkResponse (
+-- * Types
+  NetworkResponse,
+
+-- * Methods
+  networkResponseSetUri,
+  networkResponseGetUri,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+------------------
+-- Constructors
+
+-- | Set the URI of 'NetworkResponse'.
+--
+networkResponseSetUri :: 
+    NetworkResponseClass self => self 
+ -> String  -- ^ @uri@ - the uri will be set to the response.
+ -> IO()
+networkResponseSetUri response uri =
+    withCString uri $ \uriPtr -> 
+      {#call network_response_set_uri#} 
+        (toNetworkResponse response)
+        uriPtr
+
+
+-- | Return the uri of 'NetworkResponse'.
+networkResponseGetUri :: 
+    NetworkResponseClass self => self 
+ -> IO (Maybe String) -- ^ the URI or @Nothing@ in case failed.
+networkResponseGetUri response = 
+    {#call network_response_get_uri#} 
+      (toNetworkResponse response) >>= 
+      maybePeek peekCString
+
diff --git a/Graphics/UI/Gtk/WebKit/SecurityOrigin.chs b/Graphics/UI/Gtk/WebKit/SecurityOrigin.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/SecurityOrigin.chs
@@ -0,0 +1,107 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebSecurityOrigin
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit Web SecurityOrigin
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.SecurityOrigin (
+-- * Types
+  SecurityOrigin,
+
+-- * Methods  
+  securityOriginGetAllWebDatabases,
+  securityOriginGetHost,
+  securityOriginGetPort,
+  securityOriginGetProtocol,
+  securityOriginGetWebDatabaseQuota,
+  securityOriginSetWebDatabaseQuota,
+  securityOriginGetWebDatabaseUsage,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- * Methods.
+
+-- | Returns the frame's security origin.
+securityOriginGetAllWebDatabases ::
+   SecurityOriginClass self => self
+ -> IO [WebDatabase]   
+securityOriginGetAllWebDatabases so = do
+  glist <- {#call security_origin_get_all_web_databases#} (toSecurityOrigin so)
+  databasePtr <- fromGList glist
+  mapM (makeNewGObject mkWebDatabase . return) databasePtr
+
+-- | Returns the hostname for the security origin.
+securityOriginGetHost ::
+   SecurityOriginClass self => self
+ -> IO String
+securityOriginGetHost so =
+  {#call security_origin_get_host#} (toSecurityOrigin so) >>= peekCString
+
+-- | Returns the port for the security origin.
+securityOriginGetPort ::
+   SecurityOriginClass self => self
+ -> IO Int
+securityOriginGetPort so =
+  liftM fromIntegral $ {#call security_origin_get_port#} (toSecurityOrigin so)
+
+-- | Returns the protocol for the security origin.
+securityOriginGetProtocol ::
+   SecurityOriginClass self => self
+ -> IO String
+securityOriginGetProtocol so =
+  {#call security_origin_get_protocol#} (toSecurityOrigin so) >>= peekCString
+
+-- | Returns the quota for Web Database storage of the security origin in bytes.
+securityOriginGetWebDatabaseQuota ::
+   SecurityOriginClass self => self
+ -> IO Int
+securityOriginGetWebDatabaseQuota so =
+    liftM fromIntegral $ {#call security_origin_get_web_database_quota#} (toSecurityOrigin so)
+  
+-- | Returns the usage for Web Database storage of the security origin in bytes.
+securityOriginGetWebDatabaseUsage ::
+   SecurityOriginClass self => self
+ -> IO Int
+securityOriginGetWebDatabaseUsage so =
+    liftM fromIntegral $ {#call security_origin_get_web_database_usage#} (toSecurityOrigin so)
+  
+-- | Adjust the quota for Web Database storage of the security origin
+securityOriginSetWebDatabaseQuota ::
+   SecurityOriginClass self => self
+ -> Int
+ -> IO ()
+securityOriginSetWebDatabaseQuota so quota =
+  {#call security_origin_set_web_database_quota#} (toSecurityOrigin so) (fromIntegral quota)
+
diff --git a/Graphics/UI/Gtk/WebKit/Signals.chs b/Graphics/UI/Gtk/WebKit/Signals.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/Signals.chs
@@ -0,0 +1,359 @@
+{-# OPTIONS_HADDOCK hide #-}
+-- -*-haskell-*-
+-- -------------------- automatically generated file - do not edit ------------
+--  Callback installers for the GIMP Toolkit (GTK) Binding for Haskell
+--
+--  Author : Axel Simon
+--
+--  Created: 1 July 2000
+--
+--  Copyright (C) 2000-2005 Axel Simon
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- #hide
+
+-- These functions are used to connect signals to widgets. They are auto-
+-- matically created through HookGenerator.hs which takes a list of possible
+-- function signatures that are included in the GTK sources (gtkmarshal.list).
+--
+-- The object system in the second version of GTK is based on GObject from
+-- GLIB. This base class is rather primitive in that it only implements
+-- ref and unref methods (and others that are not interesting to us). If
+-- the marshall list mentions OBJECT it refers to an instance of this 
+-- GObject which is automatically wrapped with a ref and unref call.
+-- Structures which are not derived from GObject have to be passed as
+-- BOXED which gives the signal connect function a possibility to do the
+-- conversion into a proper ForeignPtr type. In special cases the signal
+-- connect function use a PTR type which will then be mangled in the
+-- user function directly. The latter is needed if a signal delivers a
+-- pointer to a string and its length in a separate integer.
+--
+module Graphics.UI.Gtk.WebKit.Signals (
+  module System.Glib.Signals,
+
+  connect_PTR_PTR__NONE,
+  connect_OBJECT__BOOL,
+  connect_OBJECT_STRING_BOXED__BOOL,
+  connect_OBJECT__PTR,
+  connect_INT_INT_STRING__BOOL,
+  connect_STRING_STRING_INT_STRING__BOOL,
+  connect_OBJECT_STRING__BOOL,
+  connect_OBJECT_STRING_STRING__BOOL,
+  connect_OBJECT_OBJECT_OBJECT_OBJECT__BOOL,
+  connect_OBJECT_OBJECT_STRING_OBJECT__BOOL,
+  connect_OBJECT_OBJECT_OBJECT_OBJECT__NONE,
+  connect_ENUM_INT__BOOL,
+  connect_NONE__BOOL,
+  connect_NONE__NONE,
+  connect_OBJECT_STRING__NONE,
+  connect_OBJECT_OBJECT__NONE,
+  connect_STRING_STRING__NONE,
+  connect_OBJECT__NONE,
+  connect_INT__NONE,
+  connect_STRING__NONE,
+  
+  ) where
+
+import Control.Monad	(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString   (peekUTFString)
+import System.Glib.GError      (failOnGError)
+{#import System.Glib.Signals#}
+{#import System.Glib.GObject#} 
+import Graphics.UI.GtkInternals
+
+
+{#context lib="gtk" prefix="gtk" #}
+
+
+-- Here are the generators that turn a Haskell function into
+-- a C function pointer. The fist Argument is always the widget,
+-- the last one is the user g_pointer. Both are ignored.
+
+
+connect_PTR_PTR__NONE :: 
+  GObjectClass obj => SignalName ->
+  ConnectAfter -> obj ->
+  (Ptr a -> Ptr b -> IO ()) ->
+  IO (ConnectId obj)
+connect_PTR_PTR__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr () -> Ptr () -> IO ()
+        action _ ptr1 ptr2 =
+          failOnGError $
+          user (castPtr ptr1) (castPtr ptr2)
+
+connect_OBJECT__BOOL :: 
+  (GObjectClass a', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> IO Bool) ->
+  IO (ConnectId obj)
+connect_OBJECT__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> IO Bool
+        action _ obj1 =
+          failOnGError $
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1')
+
+connect_OBJECT_STRING_BOXED__BOOL :: 
+  (GObjectClass a', GObjectClass obj) => SignalName ->
+  (Ptr c' -> IO c) -> 
+  ConnectAfter -> obj ->
+  (a' -> String -> c -> IO Bool) ->
+  IO (ConnectId obj)
+connect_OBJECT_STRING_BOXED__BOOL signal boxedPre3 after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> CString -> Ptr () -> IO Bool
+        action _ obj1 str2 box3 =
+          failOnGError $
+          boxedPre3 (castPtr box3) >>= \box3' ->
+          peekUTFString str2 >>= \str2' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1') str2' box3'
+
+connect_OBJECT__PTR :: 
+  (GObjectClass a', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> IO (Ptr b)) ->
+  IO (ConnectId obj)
+connect_OBJECT__PTR signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> IO (Ptr ())
+        action _ obj1 =
+          failOnGError $
+          liftM castPtr $ 
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1')
+
+connect_INT_INT_STRING__BOOL :: 
+  GObjectClass obj => SignalName ->
+  ConnectAfter -> obj ->
+  (Int -> Int -> String -> IO Bool) ->
+  IO (ConnectId obj)
+connect_INT_INT_STRING__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Int -> Int -> CString -> IO Bool
+        action _ int1 int2 str3 =
+          failOnGError $
+          peekUTFString str3 >>= \str3' ->
+          user int1 int2 str3'
+
+connect_STRING_STRING_INT_STRING__BOOL :: 
+  GObjectClass obj => SignalName ->
+  ConnectAfter -> obj ->
+  (String -> String -> Int -> String -> IO Bool) ->
+  IO (ConnectId obj)
+connect_STRING_STRING_INT_STRING__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> CString -> CString -> Int -> CString -> IO Bool
+        action _ str1 str2 int3 str4 =
+          failOnGError $
+          peekUTFString str4 >>= \str4' ->
+          peekUTFString str2 >>= \str2' ->
+          peekUTFString str1 >>= \str1' ->
+          user str1' str2' int3 str4'
+
+connect_OBJECT_STRING__BOOL :: 
+  (GObjectClass a', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> String -> IO Bool) ->
+  IO (ConnectId obj)
+connect_OBJECT_STRING__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> CString -> IO Bool
+        action _ obj1 str2 =
+          failOnGError $
+          peekUTFString str2 >>= \str2' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1') str2'
+
+connect_OBJECT_STRING_STRING__BOOL :: 
+  (GObjectClass a', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> String -> String -> IO Bool) ->
+  IO (ConnectId obj)
+connect_OBJECT_STRING_STRING__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> CString -> CString -> IO Bool
+        action _ obj1 str2 str3 =
+          failOnGError $
+          peekUTFString str3 >>= \str3' ->
+          peekUTFString str2 >>= \str2' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1') str2' str3'
+
+connect_OBJECT_OBJECT_OBJECT_OBJECT__BOOL :: 
+  (GObjectClass a', GObjectClass b', GObjectClass c', GObjectClass d', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> b' -> c' -> d' -> IO Bool) ->
+  IO (ConnectId obj)
+connect_OBJECT_OBJECT_OBJECT_OBJECT__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> Ptr GObject -> Ptr GObject -> Ptr GObject -> IO Bool
+        action _ obj1 obj2 obj3 obj4 =
+          failOnGError $
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj4) >>= \obj4' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj3) >>= \obj3' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj2) >>= \obj2' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1') (unsafeCastGObject obj2') (unsafeCastGObject obj3') (unsafeCastGObject obj4')
+
+connect_OBJECT_OBJECT_STRING_OBJECT__BOOL :: 
+  (GObjectClass a', GObjectClass b', GObjectClass d', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> b' -> String -> d' -> IO Bool) ->
+  IO (ConnectId obj)
+connect_OBJECT_OBJECT_STRING_OBJECT__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> Ptr GObject -> CString -> Ptr GObject -> IO Bool
+        action _ obj1 obj2 str3 obj4 =
+          failOnGError $
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj4) >>= \obj4' ->
+          peekUTFString str3 >>= \str3' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj2) >>= \obj2' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1') (unsafeCastGObject obj2') str3' (unsafeCastGObject obj4')
+
+connect_OBJECT_OBJECT_OBJECT_OBJECT__NONE :: 
+  (GObjectClass a', GObjectClass b', GObjectClass c', GObjectClass d', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> b' -> c' -> d' -> IO ()) ->
+  IO (ConnectId obj)
+connect_OBJECT_OBJECT_OBJECT_OBJECT__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> Ptr GObject -> Ptr GObject -> Ptr GObject -> IO ()
+        action _ obj1 obj2 obj3 obj4 =
+          failOnGError $
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj4) >>= \obj4' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj3) >>= \obj3' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj2) >>= \obj2' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1') (unsafeCastGObject obj2') (unsafeCastGObject obj3') (unsafeCastGObject obj4')
+
+connect_ENUM_INT__BOOL :: 
+  (Enum a, GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a -> Int -> IO Bool) ->
+  IO (ConnectId obj)
+connect_ENUM_INT__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Int -> Int -> IO Bool
+        action _ enum1 int2 =
+          failOnGError $
+          user (toEnum enum1) int2
+
+connect_NONE__BOOL :: 
+  GObjectClass obj => SignalName ->
+  ConnectAfter -> obj ->
+  (IO Bool) ->
+  IO (ConnectId obj)
+connect_NONE__BOOL signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> IO Bool
+        action _ =
+          failOnGError $
+          user
+
+connect_NONE__NONE :: 
+  GObjectClass obj => SignalName ->
+  ConnectAfter -> obj ->
+  (IO ()) ->
+  IO (ConnectId obj)
+connect_NONE__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> IO ()
+        action _ =
+          failOnGError $
+          user
+
+connect_OBJECT_STRING__NONE :: 
+  (GObjectClass a', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> String -> IO ()) ->
+  IO (ConnectId obj)
+connect_OBJECT_STRING__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> CString -> IO ()
+        action _ obj1 str2 =
+          failOnGError $
+          peekUTFString str2 >>= \str2' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1') str2'
+
+connect_OBJECT_OBJECT__NONE :: 
+  (GObjectClass a', GObjectClass b', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> b' -> IO ()) ->
+  IO (ConnectId obj)
+connect_OBJECT_OBJECT__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> Ptr GObject -> IO ()
+        action _ obj1 obj2 =
+          failOnGError $
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj2) >>= \obj2' ->
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1') (unsafeCastGObject obj2')
+
+connect_STRING_STRING__NONE :: 
+  GObjectClass obj => SignalName ->
+  ConnectAfter -> obj ->
+  (String -> String -> IO ()) ->
+  IO (ConnectId obj)
+connect_STRING_STRING__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> CString -> CString -> IO ()
+        action _ str1 str2 =
+          failOnGError $
+          peekUTFString str2 >>= \str2' ->
+          peekUTFString str1 >>= \str1' ->
+          user str1' str2'
+
+connect_OBJECT__NONE :: 
+  (GObjectClass a', GObjectClass obj) => SignalName ->
+  ConnectAfter -> obj ->
+  (a' -> IO ()) ->
+  IO (ConnectId obj)
+connect_OBJECT__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Ptr GObject -> IO ()
+        action _ obj1 =
+          failOnGError $
+          makeNewGObject (GObject, objectUnrefFromMainloop) (return obj1) >>= \obj1' ->
+          user (unsafeCastGObject obj1')
+
+connect_INT__NONE :: 
+  GObjectClass obj => SignalName ->
+  ConnectAfter -> obj ->
+  (Int -> IO ()) ->
+  IO (ConnectId obj)
+connect_INT__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> Int -> IO ()
+        action _ int1 =
+          failOnGError $
+          user int1
+
+connect_STRING__NONE :: 
+  GObjectClass obj => SignalName ->
+  ConnectAfter -> obj ->
+  (String -> IO ()) ->
+  IO (ConnectId obj)
+connect_STRING__NONE signal after obj user =
+  connectGeneric signal after obj action
+  where action :: Ptr GObject -> CString -> IO ()
+        action _ str1 =
+          failOnGError $
+          peekUTFString str1 >>= \str1' ->
+          user str1'
+
diff --git a/Graphics/UI/Gtk/WebKit/SoupAuthDialog.chs b/Graphics/UI/Gtk/WebKit/SoupAuthDialog.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/SoupAuthDialog.chs
@@ -0,0 +1,40 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.SoupAuthDialog
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit Web Resource
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.SoupAuthDialog (
+-- * Types
+  SoupAuthDialog,
+) where
+
+import System.Glib.FFI
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
diff --git a/Graphics/UI/Gtk/WebKit/Types.chs b/Graphics/UI/Gtk/WebKit/Types.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/Types.chs
@@ -0,0 +1,548 @@
+{-# OPTIONS_HADDOCK hide #-}
+-- -*-haskell-*-
+-- -------------------- automatically generated file - do not edit ----------
+--  Object hierarchy for the GIMP Toolkit (GTK) Binding for Haskell
+--
+--  Author : Axel Simon
+--
+--  Copyright (C) 2001-2005 Axel Simon
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- #hide
+
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- This file reflects the Gtk+ object hierarchy in terms of Haskell classes.
+--
+-- Note: the mk... functions were originally meant to simply be an alias
+-- for the constructor. However, in order to communicate the destructor
+-- of an object to objectNew, the mk... functions are now a tuple containing
+-- Haskell constructor and the destructor function pointer. This hack avoids
+-- changing all modules that simply pass mk... to objectNew.
+--
+module Graphics.UI.Gtk.WebKit.Types (
+
+  module Graphics.UI.GtkInternals,
+  WebView(WebView), WebViewClass,
+  toWebView, 
+  mkWebView, unWebView,
+  castToWebView, gTypeWebView,
+  WebFrame(WebFrame), WebFrameClass,
+  toWebFrame, 
+  mkWebFrame, unWebFrame,
+  castToWebFrame, gTypeWebFrame,
+  WebSettings(WebSettings), WebSettingsClass,
+  toWebSettings, 
+  mkWebSettings, unWebSettings,
+  castToWebSettings, gTypeWebSettings,
+  NetworkRequest(NetworkRequest), NetworkRequestClass,
+  toNetworkRequest, 
+  mkNetworkRequest, unNetworkRequest,
+  castToNetworkRequest, gTypeNetworkRequest,
+  NetworkResponse(NetworkResponse), NetworkResponseClass,
+  toNetworkResponse, 
+  mkNetworkResponse, unNetworkResponse,
+  castToNetworkResponse, gTypeNetworkResponse,
+  Download(Download), DownloadClass,
+  toDownload, 
+  mkDownload, unDownload,
+  castToDownload, gTypeDownload,
+  WebBackForwardList(WebBackForwardList), WebBackForwardListClass,
+  toWebBackForwardList, 
+  mkWebBackForwardList, unWebBackForwardList,
+  castToWebBackForwardList, gTypeWebBackForwardList,
+  WebHistoryItem(WebHistoryItem), WebHistoryItemClass,
+  toWebHistoryItem, 
+  mkWebHistoryItem, unWebHistoryItem,
+  castToWebHistoryItem, gTypeWebHistoryItem,
+  WebInspector(WebInspector), WebInspectorClass,
+  toWebInspector, 
+  mkWebInspector, unWebInspector,
+  castToWebInspector, gTypeWebInspector,
+  HitTestResult(HitTestResult), HitTestResultClass,
+  toHitTestResult, 
+  mkHitTestResult, unHitTestResult,
+  castToHitTestResult, gTypeHitTestResult,
+  SecurityOrigin(SecurityOrigin), SecurityOriginClass,
+  toSecurityOrigin, 
+  mkSecurityOrigin, unSecurityOrigin,
+  castToSecurityOrigin, gTypeSecurityOrigin,
+  SoupAuthDialog(SoupAuthDialog), SoupAuthDialogClass,
+  toSoupAuthDialog, 
+  mkSoupAuthDialog, unSoupAuthDialog,
+  castToSoupAuthDialog, gTypeSoupAuthDialog,
+  WebDatabase(WebDatabase), WebDatabaseClass,
+  toWebDatabase, 
+  mkWebDatabase, unWebDatabase,
+  castToWebDatabase, gTypeWebDatabase,
+  WebDataSource(WebDataSource), WebDataSourceClass,
+  toWebDataSource, 
+  mkWebDataSource, unWebDataSource,
+  castToWebDataSource, gTypeWebDataSource,
+  WebNavigationAction(WebNavigationAction), WebNavigationActionClass,
+  toWebNavigationAction, 
+  mkWebNavigationAction, unWebNavigationAction,
+  castToWebNavigationAction, gTypeWebNavigationAction,
+  WebPolicyDecision(WebPolicyDecision), WebPolicyDecisionClass,
+  toWebPolicyDecision, 
+  mkWebPolicyDecision, unWebPolicyDecision,
+  castToWebPolicyDecision, gTypeWebPolicyDecision,
+  WebResource(WebResource), WebResourceClass,
+  toWebResource, 
+  mkWebResource, unWebResource,
+  castToWebResource, gTypeWebResource,
+  WebWindowFeatures(WebWindowFeatures), WebWindowFeaturesClass,
+  toWebWindowFeatures, 
+  mkWebWindowFeatures, unWebWindowFeatures,
+  castToWebWindowFeatures, gTypeWebWindowFeatures
+  ) where
+
+import Foreign.ForeignPtr (ForeignPtr, castForeignPtr, unsafeForeignPtrToPtr)
+import Foreign.C.Types    (CULong, CUInt)
+import System.Glib.GType	(GType, typeInstanceIsA)
+{#import Graphics.UI.GtkInternals#}
+
+{# context lib="gtk" prefix="gtk" #}
+
+-- The usage of foreignPtrToPtr should be safe as the evaluation will only be
+-- forced if the object is used afterwards
+--
+castTo :: (GObjectClass obj, GObjectClass obj') => GType -> String
+                                                -> (obj -> obj')
+castTo gtype objTypeName obj =
+  case toGObject obj of
+    gobj@(GObject objFPtr)
+      | typeInstanceIsA ((unsafeForeignPtrToPtr.castForeignPtr) objFPtr) gtype
+                  -> unsafeCastGObject gobj
+      | otherwise -> error $ "Cannot cast object to " ++ objTypeName
+
+
+-- ******************************************************************** WebView
+
+{#pointer *WebKitWebView as WebView foreign newtype #} deriving (Eq,Ord)
+
+mkWebView = (WebView, objectUnrefFromMainloop)
+unWebView (WebView o) = o
+
+class ContainerClass o => WebViewClass o
+toWebView :: WebViewClass o => o -> WebView
+toWebView = unsafeCastGObject . toGObject
+
+instance WebViewClass WebView
+instance ContainerClass WebView
+instance WidgetClass WebView
+instance ObjectClass WebView
+instance GObjectClass WebView where
+  toGObject = GObject . castForeignPtr . unWebView
+  unsafeCastGObject = WebView . castForeignPtr . unGObject
+
+castToWebView :: GObjectClass obj => obj -> WebView
+castToWebView = castTo gTypeWebView "WebView"
+
+gTypeWebView :: GType
+gTypeWebView =
+  {# call fun unsafe webkit_web_view_get_type #}
+
+-- ******************************************************************* WebFrame
+
+{#pointer *WebKitWebFrame as WebFrame foreign newtype #} deriving (Eq,Ord)
+
+mkWebFrame = (WebFrame, objectUnrefFromMainloop)
+unWebFrame (WebFrame o) = o
+
+class GObjectClass o => WebFrameClass o
+toWebFrame :: WebFrameClass o => o -> WebFrame
+toWebFrame = unsafeCastGObject . toGObject
+
+instance WebFrameClass WebFrame
+instance GObjectClass WebFrame where
+  toGObject = GObject . castForeignPtr . unWebFrame
+  unsafeCastGObject = WebFrame . castForeignPtr . unGObject
+
+castToWebFrame :: GObjectClass obj => obj -> WebFrame
+castToWebFrame = castTo gTypeWebFrame "WebFrame"
+
+gTypeWebFrame :: GType
+gTypeWebFrame =
+  {# call fun unsafe webkit_web_frame_get_type #}
+
+-- **************************************************************** WebSettings
+
+{#pointer *WebKitWebSettings as WebSettings foreign newtype #} deriving (Eq,Ord)
+
+mkWebSettings = (WebSettings, objectUnrefFromMainloop)
+unWebSettings (WebSettings o) = o
+
+class GObjectClass o => WebSettingsClass o
+toWebSettings :: WebSettingsClass o => o -> WebSettings
+toWebSettings = unsafeCastGObject . toGObject
+
+instance WebSettingsClass WebSettings
+instance GObjectClass WebSettings where
+  toGObject = GObject . castForeignPtr . unWebSettings
+  unsafeCastGObject = WebSettings . castForeignPtr . unGObject
+
+castToWebSettings :: GObjectClass obj => obj -> WebSettings
+castToWebSettings = castTo gTypeWebSettings "WebSettings"
+
+gTypeWebSettings :: GType
+gTypeWebSettings =
+  {# call fun unsafe webkit_web_settings_get_type #}
+
+-- ************************************************************* NetworkRequest
+
+{#pointer *WebKitNetworkRequest as NetworkRequest foreign newtype #} deriving (Eq,Ord)
+
+mkNetworkRequest = (NetworkRequest, objectUnrefFromMainloop)
+unNetworkRequest (NetworkRequest o) = o
+
+class GObjectClass o => NetworkRequestClass o
+toNetworkRequest :: NetworkRequestClass o => o -> NetworkRequest
+toNetworkRequest = unsafeCastGObject . toGObject
+
+instance NetworkRequestClass NetworkRequest
+instance GObjectClass NetworkRequest where
+  toGObject = GObject . castForeignPtr . unNetworkRequest
+  unsafeCastGObject = NetworkRequest . castForeignPtr . unGObject
+
+castToNetworkRequest :: GObjectClass obj => obj -> NetworkRequest
+castToNetworkRequest = castTo gTypeNetworkRequest "NetworkRequest"
+
+gTypeNetworkRequest :: GType
+gTypeNetworkRequest =
+  {# call fun unsafe webkit_network_request_get_type #}
+
+-- ************************************************************ NetworkResponse
+
+{#pointer *WebKitNetworkResponse as NetworkResponse foreign newtype #} deriving (Eq,Ord)
+
+mkNetworkResponse = (NetworkResponse, objectUnrefFromMainloop)
+unNetworkResponse (NetworkResponse o) = o
+
+class GObjectClass o => NetworkResponseClass o
+toNetworkResponse :: NetworkResponseClass o => o -> NetworkResponse
+toNetworkResponse = unsafeCastGObject . toGObject
+
+instance NetworkResponseClass NetworkResponse
+instance GObjectClass NetworkResponse where
+  toGObject = GObject . castForeignPtr . unNetworkResponse
+  unsafeCastGObject = NetworkResponse . castForeignPtr . unGObject
+
+castToNetworkResponse :: GObjectClass obj => obj -> NetworkResponse
+castToNetworkResponse = castTo gTypeNetworkResponse "NetworkResponse"
+
+gTypeNetworkResponse :: GType
+gTypeNetworkResponse =
+  {# call fun unsafe webkit_network_response_get_type #}
+
+-- ******************************************************************* Download
+
+{#pointer *WebKitDownload as Download foreign newtype #} deriving (Eq,Ord)
+
+mkDownload = (Download, objectUnrefFromMainloop)
+unDownload (Download o) = o
+
+class GObjectClass o => DownloadClass o
+toDownload :: DownloadClass o => o -> Download
+toDownload = unsafeCastGObject . toGObject
+
+instance DownloadClass Download
+instance GObjectClass Download where
+  toGObject = GObject . castForeignPtr . unDownload
+  unsafeCastGObject = Download . castForeignPtr . unGObject
+
+castToDownload :: GObjectClass obj => obj -> Download
+castToDownload = castTo gTypeDownload "Download"
+
+gTypeDownload :: GType
+gTypeDownload =
+  {# call fun unsafe webkit_download_get_type #}
+
+-- ********************************************************* WebBackForwardList
+
+{#pointer *WebKitWebBackForwardList as WebBackForwardList foreign newtype #} deriving (Eq,Ord)
+
+mkWebBackForwardList = (WebBackForwardList, objectUnrefFromMainloop)
+unWebBackForwardList (WebBackForwardList o) = o
+
+class GObjectClass o => WebBackForwardListClass o
+toWebBackForwardList :: WebBackForwardListClass o => o -> WebBackForwardList
+toWebBackForwardList = unsafeCastGObject . toGObject
+
+instance WebBackForwardListClass WebBackForwardList
+instance GObjectClass WebBackForwardList where
+  toGObject = GObject . castForeignPtr . unWebBackForwardList
+  unsafeCastGObject = WebBackForwardList . castForeignPtr . unGObject
+
+castToWebBackForwardList :: GObjectClass obj => obj -> WebBackForwardList
+castToWebBackForwardList = castTo gTypeWebBackForwardList "WebBackForwardList"
+
+gTypeWebBackForwardList :: GType
+gTypeWebBackForwardList =
+  {# call fun unsafe webkit_web_back_forward_list_get_type #}
+
+-- ************************************************************* WebHistoryItem
+
+{#pointer *WebKitWebHistoryItem as WebHistoryItem foreign newtype #} deriving (Eq,Ord)
+
+mkWebHistoryItem = (WebHistoryItem, objectUnrefFromMainloop)
+unWebHistoryItem (WebHistoryItem o) = o
+
+class GObjectClass o => WebHistoryItemClass o
+toWebHistoryItem :: WebHistoryItemClass o => o -> WebHistoryItem
+toWebHistoryItem = unsafeCastGObject . toGObject
+
+instance WebHistoryItemClass WebHistoryItem
+instance GObjectClass WebHistoryItem where
+  toGObject = GObject . castForeignPtr . unWebHistoryItem
+  unsafeCastGObject = WebHistoryItem . castForeignPtr . unGObject
+
+castToWebHistoryItem :: GObjectClass obj => obj -> WebHistoryItem
+castToWebHistoryItem = castTo gTypeWebHistoryItem "WebHistoryItem"
+
+gTypeWebHistoryItem :: GType
+gTypeWebHistoryItem =
+  {# call fun unsafe webkit_web_history_item_get_type #}
+
+-- *************************************************************** WebInspector
+
+{#pointer *WebKitWebInspector as WebInspector foreign newtype #} deriving (Eq,Ord)
+
+mkWebInspector = (WebInspector, objectUnrefFromMainloop)
+unWebInspector (WebInspector o) = o
+
+class GObjectClass o => WebInspectorClass o
+toWebInspector :: WebInspectorClass o => o -> WebInspector
+toWebInspector = unsafeCastGObject . toGObject
+
+instance WebInspectorClass WebInspector
+instance GObjectClass WebInspector where
+  toGObject = GObject . castForeignPtr . unWebInspector
+  unsafeCastGObject = WebInspector . castForeignPtr . unGObject
+
+castToWebInspector :: GObjectClass obj => obj -> WebInspector
+castToWebInspector = castTo gTypeWebInspector "WebInspector"
+
+gTypeWebInspector :: GType
+gTypeWebInspector =
+  {# call fun unsafe webkit_web_inspector_get_type #}
+
+-- ************************************************************** HitTestResult
+
+{#pointer *WebKitHitTestResult as HitTestResult foreign newtype #} deriving (Eq,Ord)
+
+mkHitTestResult = (HitTestResult, objectUnrefFromMainloop)
+unHitTestResult (HitTestResult o) = o
+
+class GObjectClass o => HitTestResultClass o
+toHitTestResult :: HitTestResultClass o => o -> HitTestResult
+toHitTestResult = unsafeCastGObject . toGObject
+
+instance HitTestResultClass HitTestResult
+instance GObjectClass HitTestResult where
+  toGObject = GObject . castForeignPtr . unHitTestResult
+  unsafeCastGObject = HitTestResult . castForeignPtr . unGObject
+
+castToHitTestResult :: GObjectClass obj => obj -> HitTestResult
+castToHitTestResult = castTo gTypeHitTestResult "HitTestResult"
+
+gTypeHitTestResult :: GType
+gTypeHitTestResult =
+  {# call fun unsafe webkit_hit_test_result_get_type #}
+
+-- ************************************************************* SecurityOrigin
+
+{#pointer *WebKitSecurityOrigin as SecurityOrigin foreign newtype #} deriving (Eq,Ord)
+
+mkSecurityOrigin = (SecurityOrigin, objectUnrefFromMainloop)
+unSecurityOrigin (SecurityOrigin o) = o
+
+class GObjectClass o => SecurityOriginClass o
+toSecurityOrigin :: SecurityOriginClass o => o -> SecurityOrigin
+toSecurityOrigin = unsafeCastGObject . toGObject
+
+instance SecurityOriginClass SecurityOrigin
+instance GObjectClass SecurityOrigin where
+  toGObject = GObject . castForeignPtr . unSecurityOrigin
+  unsafeCastGObject = SecurityOrigin . castForeignPtr . unGObject
+
+castToSecurityOrigin :: GObjectClass obj => obj -> SecurityOrigin
+castToSecurityOrigin = castTo gTypeSecurityOrigin "SecurityOrigin"
+
+gTypeSecurityOrigin :: GType
+gTypeSecurityOrigin =
+  {# call fun unsafe webkit_security_origin_get_type #}
+
+-- ************************************************************* SoupAuthDialog
+
+{#pointer *WebKitSoupAuthDialog as SoupAuthDialog foreign newtype #} deriving (Eq,Ord)
+
+mkSoupAuthDialog = (SoupAuthDialog, objectUnrefFromMainloop)
+unSoupAuthDialog (SoupAuthDialog o) = o
+
+class GObjectClass o => SoupAuthDialogClass o
+toSoupAuthDialog :: SoupAuthDialogClass o => o -> SoupAuthDialog
+toSoupAuthDialog = unsafeCastGObject . toGObject
+
+instance SoupAuthDialogClass SoupAuthDialog
+instance GObjectClass SoupAuthDialog where
+  toGObject = GObject . castForeignPtr . unSoupAuthDialog
+  unsafeCastGObject = SoupAuthDialog . castForeignPtr . unGObject
+
+castToSoupAuthDialog :: GObjectClass obj => obj -> SoupAuthDialog
+castToSoupAuthDialog = castTo gTypeSoupAuthDialog "SoupAuthDialog"
+
+gTypeSoupAuthDialog :: GType
+gTypeSoupAuthDialog =
+  {# call fun unsafe webkit_soup_auth_dialog_get_type #}
+
+-- **************************************************************** WebDatabase
+
+{#pointer *WebKitWebDatabase as WebDatabase foreign newtype #} deriving (Eq,Ord)
+
+mkWebDatabase = (WebDatabase, objectUnrefFromMainloop)
+unWebDatabase (WebDatabase o) = o
+
+class GObjectClass o => WebDatabaseClass o
+toWebDatabase :: WebDatabaseClass o => o -> WebDatabase
+toWebDatabase = unsafeCastGObject . toGObject
+
+instance WebDatabaseClass WebDatabase
+instance GObjectClass WebDatabase where
+  toGObject = GObject . castForeignPtr . unWebDatabase
+  unsafeCastGObject = WebDatabase . castForeignPtr . unGObject
+
+castToWebDatabase :: GObjectClass obj => obj -> WebDatabase
+castToWebDatabase = castTo gTypeWebDatabase "WebDatabase"
+
+gTypeWebDatabase :: GType
+gTypeWebDatabase =
+  {# call fun unsafe webkit_web_database_get_type #}
+
+-- ************************************************************** WebDataSource
+
+{#pointer *WebKitWebDataSource as WebDataSource foreign newtype #} deriving (Eq,Ord)
+
+mkWebDataSource = (WebDataSource, objectUnrefFromMainloop)
+unWebDataSource (WebDataSource o) = o
+
+class GObjectClass o => WebDataSourceClass o
+toWebDataSource :: WebDataSourceClass o => o -> WebDataSource
+toWebDataSource = unsafeCastGObject . toGObject
+
+instance WebDataSourceClass WebDataSource
+instance GObjectClass WebDataSource where
+  toGObject = GObject . castForeignPtr . unWebDataSource
+  unsafeCastGObject = WebDataSource . castForeignPtr . unGObject
+
+castToWebDataSource :: GObjectClass obj => obj -> WebDataSource
+castToWebDataSource = castTo gTypeWebDataSource "WebDataSource"
+
+gTypeWebDataSource :: GType
+gTypeWebDataSource =
+  {# call fun unsafe webkit_web_data_source_get_type #}
+
+-- ******************************************************** WebNavigationAction
+
+{#pointer *WebKitWebNavigationAction as WebNavigationAction foreign newtype #} deriving (Eq,Ord)
+
+mkWebNavigationAction = (WebNavigationAction, objectUnrefFromMainloop)
+unWebNavigationAction (WebNavigationAction o) = o
+
+class GObjectClass o => WebNavigationActionClass o
+toWebNavigationAction :: WebNavigationActionClass o => o -> WebNavigationAction
+toWebNavigationAction = unsafeCastGObject . toGObject
+
+instance WebNavigationActionClass WebNavigationAction
+instance GObjectClass WebNavigationAction where
+  toGObject = GObject . castForeignPtr . unWebNavigationAction
+  unsafeCastGObject = WebNavigationAction . castForeignPtr . unGObject
+
+castToWebNavigationAction :: GObjectClass obj => obj -> WebNavigationAction
+castToWebNavigationAction = castTo gTypeWebNavigationAction "WebNavigationAction"
+
+gTypeWebNavigationAction :: GType
+gTypeWebNavigationAction =
+  {# call fun unsafe webkit_web_navigation_action_get_type #}
+
+-- ********************************************************** WebPolicyDecision
+
+{#pointer *WebKitWebPolicyDecision as WebPolicyDecision foreign newtype #} deriving (Eq,Ord)
+
+mkWebPolicyDecision = (WebPolicyDecision, objectUnrefFromMainloop)
+unWebPolicyDecision (WebPolicyDecision o) = o
+
+class GObjectClass o => WebPolicyDecisionClass o
+toWebPolicyDecision :: WebPolicyDecisionClass o => o -> WebPolicyDecision
+toWebPolicyDecision = unsafeCastGObject . toGObject
+
+instance WebPolicyDecisionClass WebPolicyDecision
+instance GObjectClass WebPolicyDecision where
+  toGObject = GObject . castForeignPtr . unWebPolicyDecision
+  unsafeCastGObject = WebPolicyDecision . castForeignPtr . unGObject
+
+castToWebPolicyDecision :: GObjectClass obj => obj -> WebPolicyDecision
+castToWebPolicyDecision = castTo gTypeWebPolicyDecision "WebPolicyDecision"
+
+gTypeWebPolicyDecision :: GType
+gTypeWebPolicyDecision =
+  {# call fun unsafe webkit_web_policy_decision_get_type #}
+
+-- **************************************************************** WebResource
+
+{#pointer *WebKitWebResource as WebResource foreign newtype #} deriving (Eq,Ord)
+
+mkWebResource = (WebResource, objectUnrefFromMainloop)
+unWebResource (WebResource o) = o
+
+class GObjectClass o => WebResourceClass o
+toWebResource :: WebResourceClass o => o -> WebResource
+toWebResource = unsafeCastGObject . toGObject
+
+instance WebResourceClass WebResource
+instance GObjectClass WebResource where
+  toGObject = GObject . castForeignPtr . unWebResource
+  unsafeCastGObject = WebResource . castForeignPtr . unGObject
+
+castToWebResource :: GObjectClass obj => obj -> WebResource
+castToWebResource = castTo gTypeWebResource "WebResource"
+
+gTypeWebResource :: GType
+gTypeWebResource =
+  {# call fun unsafe webkit_web_resource_get_type #}
+
+-- ********************************************************** WebWindowFeatures
+
+{#pointer *WebKitWebWindowFeatures as WebWindowFeatures foreign newtype #} deriving (Eq,Ord)
+
+mkWebWindowFeatures = (WebWindowFeatures, objectUnrefFromMainloop)
+unWebWindowFeatures (WebWindowFeatures o) = o
+
+class GObjectClass o => WebWindowFeaturesClass o
+toWebWindowFeatures :: WebWindowFeaturesClass o => o -> WebWindowFeatures
+toWebWindowFeatures = unsafeCastGObject . toGObject
+
+instance WebWindowFeaturesClass WebWindowFeatures
+instance GObjectClass WebWindowFeatures where
+  toGObject = GObject . castForeignPtr . unWebWindowFeatures
+  unsafeCastGObject = WebWindowFeatures . castForeignPtr . unGObject
+
+castToWebWindowFeatures :: GObjectClass obj => obj -> WebWindowFeatures
+castToWebWindowFeatures = castTo gTypeWebWindowFeatures "WebWindowFeatures"
+
+gTypeWebWindowFeatures :: GType
+gTypeWebWindowFeatures =
+  {# call fun unsafe webkit_web_window_features_get_type #}
+
diff --git a/Graphics/UI/Gtk/WebKit/WebBackForwardList.chs b/Graphics/UI/Gtk/WebKit/WebBackForwardList.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebBackForwardList.chs
@@ -0,0 +1,227 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.Download
+--  Author      :  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+-- 
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- The history of a 'WebView'
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebBackForwardList (
+-- * Types
+  WebBackForwardList,
+
+-- * Constructors
+  webBackForwardListNewWithWebView,
+
+-- * Methods
+  webBackForwardListGoForward,
+  webBackForwardListGoBack,
+  webBackForwardListContainsItem,
+  webBackForwardListGoToItem,
+  webBackForwardListGetBackItem,
+  webBackForwardListGetCurrentItem,
+  webBackForwardListGetForwardItem,
+  webBackForwardListGetNthItem,
+  webBackForwardListGetBackLength,
+  webBackForwardListGetForwardLength,
+  webBackForwardListGetLimit,
+  webBackForwardListSetLimit,
+  webBackForwardListAddItem,
+  webBackForwardListGetForwardListWithLimit,
+  webBackForwardListGetBackListWithLimit,
+ 
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+
+------------------
+-- Constructors
+
+-- | Create an WebBackForwardList with a controlling WebView.
+webBackForwardListNewWithWebView :: (WebViewClass webview) => webview -> IO WebBackForwardList
+webBackForwardListNewWithWebView webview = 
+    constructNewGObject mkWebBackForwardList $ 
+      {#call web_back_forward_list_new_with_web_view#} 
+        (toWebView webview)
+
+-- | Steps forward in the back forward list.
+webBackForwardListGoForward :: 
+    WebBackForwardListClass self => self
+ -> IO()
+webBackForwardListGoForward webbackforwardlist = 
+    {#call web_back_forward_list_go_forward#} (toWebBackForwardList webbackforwardlist)
+
+-- | Steps back in the back forward list.
+webBackForwardListGoBack :: 
+    WebBackForwardListClass self => self
+ -> IO()
+webBackForwardListGoBack webbackforwardlist = 
+    {#call web_back_forward_list_go_back#} (toWebBackForwardList webbackforwardlist)
+
+-- | Check if an history item in the back forward list.
+webBackForwardListContainsItem :: 
+    (WebBackForwardListClass self, WebHistoryItemClass item) => self
+ -> item
+ -> IO Bool
+webBackForwardListContainsItem webbackforwardlist webhistoryitem = 
+    liftM toBool $ {#call web_back_forward_list_contains_item#} 
+      (toWebBackForwardList webbackforwardlist)
+      (toWebHistoryItem webhistoryitem)
+
+-- | Go to the specified history item in the back forward list.
+webBackForwardListGoToItem :: 
+    (WebBackForwardListClass self,WebHistoryItemClass item) => self
+ -> item
+ -> IO()
+webBackForwardListGoToItem webbackforwardlist webhistoryitem =
+    {#call web_back_forward_list_go_to_item#} 
+      (toWebBackForwardList webbackforwardlist)
+      (toWebHistoryItem webhistoryitem)
+
+-- | Return the history item that precedes the current history item.
+webBackForwardListGetBackItem :: 
+    WebBackForwardListClass self => self 
+ -> IO (Maybe WebHistoryItem) -- ^ A 'WebHistoryItem' or @Nothing@ 
+                              -- if there is nothing precedes the current item.
+webBackForwardListGetBackItem webbackforwardlist = 
+    maybeNull (makeNewGObject mkWebHistoryItem) $ 
+      {#call web_back_forward_list_get_back_item#} 
+        (toWebBackForwardList webbackforwardlist)
+
+-- | Return the current history item of the back forward list
+webBackForwardListGetCurrentItem :: 
+    WebBackForwardListClass self => self
+ -> IO WebHistoryItem
+webBackForwardListGetCurrentItem webbackforwardlist = 
+    makeNewGObject mkWebHistoryItem $ 
+      {#call web_back_forward_list_get_current_item#} 
+      (toWebBackForwardList webbackforwardlist)
+
+-- | Return the item that succeeds the current item 
+
+webBackForwardListGetForwardItem :: 
+    WebBackForwardListClass self => self 
+ -> IO (Maybe WebHistoryItem) -- ^ A 'WebHistoryItem' or @Nothing@ 
+                              -- if there is nothing succeeds the current item.
+webBackForwardListGetForwardItem webbackforwardlist = 
+    maybeNull (makeNewGObject mkWebHistoryItem) $ 
+      {#call web_back_forward_list_get_forward_item#} 
+      (toWebBackForwardList webbackforwardlist)
+
+-- | Return the history item at a given index relative to the current item.
+webBackForwardListGetNthItem :: 
+    WebBackForwardListClass self => self -- ^ @webbackforwardlist@ - a WebBackForwardList
+ -> Int  -- ^ @index@ - the index of the item
+ -> IO WebHistoryItem
+webBackForwardListGetNthItem webbackforwardlist index =  
+    makeNewGObject mkWebHistoryItem  $ 
+      {#call web_back_forward_list_get_nth_item#} 
+      (toWebBackForwardList webbackforwardlist)
+      (fromIntegral index)
+
+-- | Return the number of items that preced the current item.
+webBackForwardListGetBackLength :: 
+    WebBackForwardListClass self => self
+ -> IO Int 
+webBackForwardListGetBackLength webbackforwardlist = 
+    liftM fromIntegral $ 
+      {#call web_back_forward_list_get_back_length#} 
+        (toWebBackForwardList webbackforwardlist)
+
+-- | Return the number of items that succeed the current item.
+webBackForwardListGetForwardLength :: 
+    WebBackForwardListClass self => self
+ -> IO Int
+webBackForwardListGetForwardLength webbackforwardlist = 
+    liftM fromIntegral $ 
+      {#call web_back_forward_list_get_forward_length#} 
+        (toWebBackForwardList webbackforwardlist)
+
+-- | Return the maximum limit of the back forward list.
+webBackForwardListGetLimit :: 
+    WebBackForwardListClass self => self
+ -> IO Int
+webBackForwardListGetLimit webbackforwardlist = 
+    liftM fromIntegral $ 
+      {#call web_back_forward_list_get_limit#} 
+        (toWebBackForwardList webbackforwardlist)
+
+-- | Set the maximum limit of the back forward list. 
+-- 
+-- if the back forward list exceeds its capacity, 
+-- items will be removed everytime a new item had been added.
+--
+webBackForwardListSetLimit :: 
+    WebBackForwardListClass self => self
+ -> Int
+ -> IO()
+webBackForwardListSetLimit webbackforwardlist limit = 
+    {#call web_back_forward_list_set_limit#} 
+      (toWebBackForwardList webbackforwardlist)
+      (fromIntegral limit)
+
+-- | Add the item to the back forward list.
+webBackForwardListAddItem :: 
+    (WebBackForwardListClass self,WebHistoryItemClass item) => self
+ -> item
+ -> IO ()
+webBackForwardListAddItem webbackforwardlist webhistoryitem = 
+    {#call web_back_forward_list_add_item#} 
+      (toWebBackForwardList webbackforwardlist)
+      (toWebHistoryItem webhistoryitem)
+
+-- | Return a list of items that succeed the current item, limited by @limit@.
+webBackForwardListGetForwardListWithLimit :: 
+    WebBackForwardListClass self => self 
+ -> Int  -- ^ the number of items to retrieve
+ -> IO [WebHistoryItem] -- ^ a 'List' of items succeeding the current item, limited by limit.
+webBackForwardListGetForwardListWithLimit webbackforwardlist limit = 
+  {#call web_back_forward_list_get_forward_list_with_limit#} 
+    (toWebBackForwardList webbackforwardlist)
+    (fromIntegral limit)
+    >>= fromGList 
+    >>= mapM (makeNewGObject mkWebHistoryItem . return)
+
+-- | Return a list of items that preced the current item.
+-- limited by limit.
+webBackForwardListGetBackListWithLimit :: 
+    WebBackForwardListClass self => self 
+ -> Int -- ^ the number of items to retrieve
+ -> IO [WebHistoryItem] -- ^ a 'List' of items preceding the current item, limited by limit
+webBackForwardListGetBackListWithLimit webbackforwardlist limit = 
+  {#call web_back_forward_list_get_back_list_with_limit#} 
+    (toWebBackForwardList webbackforwardlist)
+    (fromIntegral limit)
+    >>= fromGList 
+    >>= mapM (makeNewGObject mkWebHistoryItem . return)
+
diff --git a/Graphics/UI/Gtk/WebKit/WebDataSource.chs b/Graphics/UI/Gtk/WebKit/WebDataSource.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebDataSource.chs
@@ -0,0 +1,133 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebDataSource
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Note
+--
+-- Function `webkit_web_data_source_get_data` haven't binding, 
+-- no idea how to handle `GString`
+--
+-- Access to the WebKit Web DataSource
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebDataSource (
+-- * Types
+  WebDataSource,
+
+-- * Constructors
+  webDataSourceNew,
+
+-- * Methods  
+  webDataSourceGetEncoding,
+  webDataSourceGetInitialRequest,
+  webDataSourceGetMainResource,
+  webDataSourceGetRequest,
+  webDataSourceGetSubresources,
+  webDataSourceGetUnreachableUri,
+  webDataSourceGetWebFrame,
+  webDataSourceIsLoading,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- | Creates a new 'WebDataSource' instance. 
+-- The URL of the 'WebDataSource' will be set to "about:blank".
+webDataSourceNew :: IO WebDataSource
+webDataSourceNew = 
+    constructNewGObject mkWebDataSource $ {#call web_data_source_new#} 
+
+-- | Returns the text encoding name as set in the 'WebView', or if not, the text encoding of the response.
+webDataSourceGetEncoding ::
+   WebDataSourceClass self => self
+ -> IO String
+webDataSourceGetEncoding ds = 
+  {#call web_data_source_get_encoding#} (toWebDataSource ds) >>= peekCString
+  
+-- | Returns a reference to the original request that was used to load the web content. 
+-- The NetworkRequest returned by this method is the
+-- request prior to the "committed" load state. 
+-- See 'webDataSourceGetRequest' for getting the "committed" request.
+webDataSourceGetInitialRequest ::
+   WebDataSourceClass self => self
+ -> IO NetworkRequest
+webDataSourceGetInitialRequest ds =
+  makeNewGObject mkNetworkRequest $ {# call web_data_source_get_initial_request#} (toWebDataSource ds)
+
+-- | Returns the main resource of the data_source
+webDataSourceGetMainResource ::
+   WebDataSourceClass self => self
+ -> IO WebResource   
+webDataSourceGetMainResource ds =
+  makeNewGObject mkWebResource $ {#call web_data_source_get_main_resource#} (toWebDataSource ds)
+  
+-- | Returns a NetworkRequest that was used to create this 'WebDataSource'. 
+-- The NetworkRequest returned by this method is the request that was "committed", 
+-- and hence, different from the request you get from the 'webDataSourceGetInitialRequest' method.
+webDataSourceGetRequest ::
+   WebDataSourceClass self => self
+ -> IO NetworkRequest
+webDataSourceGetRequest ds =
+  makeNewGObject mkNetworkRequest $ {# call web_data_source_get_request#} (toWebDataSource ds)
+
+-- | Gives you a List of 'WebResource' objects that compose the 'WebView' to which this 'WebDataSource' is attached.
+webDataSourceGetSubresources ::
+   WebDataSourceClass self => self
+ -> IO [WebResource]   
+webDataSourceGetSubresources ds = do
+  glist <- {#call web_data_source_get_subresources#} (toWebDataSource ds)
+  resourcePtr <- fromGList glist
+  mapM (makeNewGObject mkWebResource . return) resourcePtr
+
+-- | Return the unreachable URI of data_source. 
+-- The 'dataSource' will have an unreachable URL 
+-- if it was created using 'WebFrame''s  
+-- 'webFrameLoadAlternateHtmlString' method.
+webDataSourceGetUnreachableUri ::
+   WebDataSourceClass self => self
+ -> IO String
+webDataSourceGetUnreachableUri ds =
+  {#call web_data_source_get_unreachable_uri#} (toWebDataSource ds) >>= peekCString
+
+-- | Returns the 'WebFrame' that represents this data source
+webDataSourceGetWebFrame ::
+   WebDataSourceClass self => self
+ -> IO WebFrame
+webDataSourceGetWebFrame ds =
+  makeNewGObject mkWebFrame $ {#call web_data_source_get_web_frame#} (toWebDataSource ds)
+
+-- | Determines whether the data source is in the process of loading its content.
+webDataSourceIsLoading ::
+   WebDataSourceClass self => self
+ -> IO Bool
+webDataSourceIsLoading ds =
+    liftM toBool $ {#call web_data_source_is_loading#} (toWebDataSource ds)
diff --git a/Graphics/UI/Gtk/WebKit/WebDatabase.chs b/Graphics/UI/Gtk/WebKit/WebDatabase.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebDatabase.chs
@@ -0,0 +1,103 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebDatabase
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit Web Database
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebDatabase (
+-- * Types
+  WebDatabase,
+
+-- * Methods  
+  webDatabaseGetDisplayName,
+  webDatabaseGetExpectedSize,
+  webDatabaseGetFilename,
+  webDatabaseGetName,
+  webDatabaseGetSecurityOrigin,
+  webDatabaseGetSize,
+  webDatabaseRemove,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- | Returns the name of the 'WebDatabase' as seen by the user.
+webDatabaseGetDisplayName ::
+   WebDatabaseClass self => self
+ -> IO String
+webDatabaseGetDisplayName wd =
+  {#call web_database_get_display_name#} (toWebDatabase wd) >>= peekCString
+  
+-- | Returns the expected size of the Database in bytes as defined by the web author. The Web Database standard allows web authors to
+-- specify an expected size of the database to optimize the user experience.
+webDatabaseGetExpectedSize ::  
+   WebDatabaseClass self => self
+ -> IO Int  
+webDatabaseGetExpectedSize wd =
+    liftM fromIntegral $ {#call web_database_get_expected_size#} (toWebDatabase wd)
+
+-- | Returns the absolute filename to the WebKitWebDatabase file on disk.
+webDatabaseGetFilename ::
+   WebDatabaseClass self => self
+ -> IO String
+webDatabaseGetFilename wd = 
+  {#call web_database_get_filename#} (toWebDatabase wd) >>= peekCString
+
+-- | Returns the canonical name of the 'WebDatabase'.
+webDatabaseGetName ::
+   WebDatabaseClass self => self
+ -> IO String
+webDatabaseGetName wd = 
+  {#call web_database_get_name#} (toWebDatabase wd) >>= peekCString
+
+-- | Returns the security origin of the WebKitWebDatabase.
+webDatabaseGetSecurityOrigin :: 
+   WebDatabaseClass self => self
+ -> IO SecurityOrigin   
+webDatabaseGetSecurityOrigin wd =
+  makeNewGObject mkSecurityOrigin $ {#call web_database_get_security_origin#} (toWebDatabase wd)
+
+-- | Returns the actual size of the 'WebDatabase' space on disk in bytes.  
+webDatabaseGetSize ::
+   WebDatabaseClass self => self  
+ -> IO Int
+webDatabaseGetSize wd = 
+    liftM fromIntegral $ {#call web_database_get_size#} (toWebDatabase wd)
+  
+-- | Removes the 'WebDatabase' from its security origin and destroys all data stored in the database.
+webDatabaseRemove ::
+   WebDatabaseClass self => self
+ -> IO ()
+webDatabaseRemove wd =
+  {#call web_database_remove#} (toWebDatabase wd)
+
diff --git a/Graphics/UI/Gtk/WebKit/WebFrame.chs b/Graphics/UI/Gtk/WebKit/WebFrame.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebFrame.chs
@@ -0,0 +1,284 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebFrame
+--  Author      :  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+-- 
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- The content of a 'WebView'
+--
+-- Note:
+-- Functon `webkit_web_frame_get_global_context` can't binding now, 
+-- Because it need `JSGlobalContextRef` exist in JavaScriptCore.
+--
+-- Function `webkit_web_frame_print_full` can't binding now,
+-- Because library `GtkPrintOperation` haven't binding.
+--
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebFrame (
+-- * Types
+  WebFrame,
+
+-- * Constructors
+  webFrameNew,
+
+-- * Methods
+  webFrameGetWebView,
+  webFrameGetName,
+  webFrameGetTitle,
+  webFrameGetUri,
+  webFrameGetParent,
+  webFrameGetLoadStatus,
+  webFrameLoadUri,
+  webFrameLoadString,
+  webFrameLoadAlternateString,
+  webFrameLoadRequest,
+  webFrameStopLoading,
+  webFrameReload,
+  webFrameFindFrame,
+  webFrameGetDataSource,
+  webFrameGetHorizontalScrollbarPolicy,
+  webFrameGetVerticalScrollbarPolicy,
+  webFrameGetProvisionalDataSource,
+  webFrameGetSecurityOrigin,
+  webFramePrint,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+import Graphics.UI.Gtk.General.Enums
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- * Enums
+
+{#enum LoadStatus {underscoreToCase}#}
+
+------------------
+-- Constructors
+
+
+-- | Create a new 'WebFrame' instance with the given @webview@.
+--
+-- A 'WebFrame' contains the content of one URI.
+webFrameNew :: 
+    WebViewClass webview => webview  -- ^ @webview@ - the given webview
+ -> IO WebFrame
+webFrameNew webview =  
+    constructNewGObject mkWebFrame $ {#call web_frame_new#} (toWebView webview)
+
+-- | Return the 'WebView' that manages the given 'WebFrame'.
+webFrameGetWebView :: 
+    WebFrameClass self => self
+ -> IO WebView
+webFrameGetWebView webframe = 
+    makeNewObject mkWebView $ liftM castPtr $ {#call web_frame_get_web_view#} (toWebFrame webframe)
+
+-- | Return the name of the given 'WebFrame'.
+webFrameGetName :: 
+    WebFrameClass self => self
+ -> IO (Maybe String) -- ^ the name string or @Nothing@ in case failed.
+webFrameGetName webframe = 
+    {#call web_frame_get_name#} (toWebFrame webframe) >>= maybePeek peekCString
+
+-- | Return the title of the given 'WebFrame'.
+webFrameGetTitle :: 
+    WebFrameClass self => self 
+ -> IO (Maybe String) -- ^ the title string or @Nothing@ in case failed.
+webFrameGetTitle webframe = 
+    {#call web_frame_get_title#} (toWebFrame webframe) >>= maybePeek peekCString
+
+-- | Return the URI of the given 'WebFrame'.	
+webFrameGetUri :: 
+    WebFrameClass self => self 
+ -> IO (Maybe String) -- ^ the URI string or @Nothing@ in case failed.
+webFrameGetUri webframe = 
+    {#call web_frame_get_uri#} (toWebFrame webframe) >>= maybePeek peekCString
+
+-- | Return the 'WebFrame''s parent frame if it has one,
+-- Otherwise return Nothing.
+webFrameGetParent :: 
+    WebFrameClass self => self 
+ -> IO (Maybe WebFrame) -- ^ a 'WebFrame' or @Nothing@ in case failed.
+webFrameGetParent webframe = 
+    maybeNull (makeNewGObject mkWebFrame) $ {#call web_frame_get_parent#} (toWebFrame webframe)
+
+-- | Determines the current status of the load.
+--
+-- frame :   a WebKitWebView 
+--                          
+-- * Since 1.1.7
+webFrameGetLoadStatus ::
+    WebFrameClass self => self
+ -> IO LoadStatus    
+webFrameGetLoadStatus ls =
+    liftM (toEnum . fromIntegral) $ {#call web_frame_get_load_status#} (toWebFrame ls)
+
+-- | Request loading of the specified URI string.
+webFrameLoadUri :: 
+    WebFrameClass self => self 
+ -> String -- ^ @uri@ - an URI string. 
+ -> IO ()
+webFrameLoadUri webframe uri = 
+    withCString uri $ \uriPtr -> {#call web_frame_load_uri#}
+    (toWebFrame webframe)
+    uriPtr
+
+-- | Requests loading of the given @content@ 
+-- with the specified @mime_type@, @encoding@ and @base_uri@.
+-- 
+-- If @mime_type@ is @Nothing@, \"text/html\" is assumed.
+--
+-- If @encoding@ is @Nothing@, \"UTF-8\" is assumed.
+webFrameLoadString :: 
+    WebFrameClass self => self 
+ -> String -- ^ @content@ - the content string to be loaded.
+ -> (Maybe String) -- ^ @mime_type@ - the MIME type or @Nothing@. 
+ -> (Maybe String) -- ^ @encoding@ - the encoding or @Nothing@.
+ -> String -- ^ @base_uri@ - the base URI for relative locations.
+ -> IO()
+webFrameLoadString webframe content mimetype encoding baseuri = 
+    withCString content  $ \contentPtr ->
+    maybeWith withCString mimetype $ \mimetypePtr ->
+    maybeWith withCString encoding $ \encodingPtr ->
+    withCString baseuri  $ \baseuriPtr ->
+        {#call web_frame_load_string#} 
+          (toWebFrame webframe) 
+          contentPtr 
+          mimetypePtr 
+          encodingPtr 
+          baseuriPtr
+
+-- |Request loading of an alternate content for a URL that is unreachable.
+--
+-- Using this method will preserve the back-forward list.
+-- The URI passed in @base_uri@ has to be an absolute URI.		
+webFrameLoadAlternateString :: 
+    WebFrameClass self => self 
+ -> String  -- ^ @content@ - the alternate content to display 
+            -- as the main page of the frame
+ -> String  -- ^ @base_uri@ - the base URI for relative locations. 
+ -> String  -- ^ @unreachable_url@ - the URL for the alternate page content.
+ -> IO()
+webFrameLoadAlternateString webframe content baseurl unreachableurl = 
+    withCString content  $ \contentPtr ->
+    withCString baseurl  $ \baseurlPtr ->
+    withCString unreachableurl  $ \unreachableurlPtr ->
+        {#call web_frame_load_alternate_string#}
+          (toWebFrame webframe) 
+          contentPtr
+          baseurlPtr
+          unreachableurlPtr
+
+-- | Connects to a given URI by initiating an asynchronous client request.
+--
+-- Creates a provisional data source that will transition to a committed data source once any data has been received. 
+-- Use 'webFrameStopLoading' to stop the load. 
+-- This function is typically invoked on the main frame.
+webFrameLoadRequest :: 
+   (WebFrameClass self, NetworkRequestClass requ) => self -> requ
+ -> IO ()
+webFrameLoadRequest webframe request =
+  {#call web_frame_load_request#} (toWebFrame webframe) (toNetworkRequest request) 
+
+-- | Stops and pending loads on the given data source and those of its children.
+webFrameStopLoading :: 
+    WebFrameClass self => self
+ -> IO()
+webFrameStopLoading webframe = 
+    {#call web_frame_stop_loading#} (toWebFrame webframe)
+
+-- |Reloads the initial request.
+webFrameReload :: 
+    WebFrameClass self => self
+ -> IO()
+webFrameReload webframe = 
+    {#call web_frame_reload#} (toWebFrame webframe)
+
+-- |Return the 'WebFrame' associated with the given name 
+-- or @Nothing@ in case none if found
+-- 
+-- For pre-defined names, return the given webframe if name is 
+webFrameFindFrame:: 
+    WebFrameClass self => self 
+ -> String  -- ^ @name@ - the name of the frame to be found.
+ -> IO (Maybe WebFrame)
+webFrameFindFrame webframe name = 
+    withCString name $ \namePtr ->
+	maybeNull (makeNewGObject mkWebFrame) $ 
+          {#call web_frame_find_frame#} (toWebFrame webframe) namePtr
+
+-- | Returns the committed data source.
+webFrameGetDataSource :: 
+   WebFrameClass self => self
+ -> IO WebDataSource
+webFrameGetDataSource webframe =
+  makeNewGObject mkWebDataSource $ {#call web_frame_get_data_source#} (toWebFrame webframe)
+
+-- | Return the policy of horizontal scrollbar.
+webFrameGetHorizontalScrollbarPolicy :: 
+   WebFrameClass self => self
+ -> IO PolicyType   
+webFrameGetHorizontalScrollbarPolicy webframe = 
+    liftM (toEnum.fromIntegral) $
+    {#call web_frame_get_horizontal_scrollbar_policy#} (toWebFrame webframe)
+  
+-- | Return the policy of vertical scrollbar.
+webFrameGetVerticalScrollbarPolicy :: 
+   WebFrameClass self => self
+ -> IO PolicyType   
+webFrameGetVerticalScrollbarPolicy webframe = 
+    liftM (toEnum.fromIntegral) $
+    {#call web_frame_get_vertical_scrollbar_policy#} (toWebFrame webframe)
+
+-- | You use the 'webFrameLoadRequest' method to initiate a request that creates a provisional data source. 
+-- The provisional data source will transition to a committed data source once any data has been received. 
+-- Use 'webFrameGetDataSource' to get the committed data source.
+webFrameGetProvisionalDataSource :: 
+   WebFrameClass self => self
+ -> IO WebDataSource   
+webFrameGetProvisionalDataSource webframe =
+  makeNewGObject mkWebDataSource $ {#call web_frame_get_provisional_data_source#} (toWebFrame webframe)
+
+-- | Returns the frame's security origin.
+webFrameGetSecurityOrigin ::
+   WebFrameClass self => self
+ -> IO SecurityOrigin   
+webFrameGetSecurityOrigin webframe = 
+  makeNewGObject mkSecurityOrigin $ {#call web_frame_get_security_origin#} (toWebFrame webframe)
+
+-- |Prints the given 'WebFrame'.
+--
+-- by presenting a print dialog to the user. 
+webFramePrint:: 
+    WebFrameClass self => self
+ -> IO()
+webFramePrint webframe = 
+  {#call web_frame_print#} (toWebFrame webframe)
+
diff --git a/Graphics/UI/Gtk/WebKit/WebHistoryItem.chs b/Graphics/UI/Gtk/WebKit/WebHistoryItem.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebHistoryItem.chs
@@ -0,0 +1,187 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebHistoryItem
+--  Author      :  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- One item of the 'WebBackForwardList' and or global history
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebHistoryItem (
+-- * Types
+  WebHistoryItem,
+
+-- * Constructors
+  webHistoryItemNew,
+  webHistoryItemNewWithData,
+
+-- * Attributes
+  webHistoryItemTitle,
+  webHistoryItemAlternateTitle,
+  webHistoryItemUri,
+  webHistoryItemOriginalUri,
+  webHistoryItemLastVisitedTime,
+
+-- * Methods
+  webHistoryItemGetTitle,
+  webHistoryItemGetAlternateTitle,
+  webHistoryItemSetAlternateTitle,
+  webHistoryItemGetUri,
+  webHistoryItemGetOriginalUri,
+  webHistoryItemGetLastVisitedTime,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import System.Glib.Attributes
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+------------------
+-- Constructors
+
+
+
+-- | Create a new 'WebHistoryItem' instance.
+--
+-- A history item consists out of a title and a uri, 
+-- it can be part of the WebBackForwardList and the global history.
+--
+-- The global history is used for coloring the links of visited sites.
+-- 'WebHistoryItem' constructed with 'webHistoryItemNew' are 
+-- automatically added to the global history.
+webHistoryItemNew :: IO WebHistoryItem
+webHistoryItemNew = 
+    constructNewGObject mkWebHistoryItem $ {#call web_history_item_new#}
+
+
+-- | Create a new 'WebHistoryItem' instance with the given @uri@ and @title@.
+-- 
+-- 'WebHistoryItem' constructed with 'webHistoryItemNewWithData' are 
+-- automatically added to the global history.
+webHistoryItemNewWithData :: 
+    String -- ^ @uri@ - the uri of the item
+ -> String -- ^ @title@ - the title of the item
+ -> IO WebHistoryItem
+webHistoryItemNewWithData uri title = 
+    withCString uri $ \uriPtr ->
+    withCString title $ \titlePtr ->
+    constructNewGObject mkWebHistoryItem $
+      {#call web_history_item_new_with_data#} 
+        uriPtr 
+        titlePtr
+
+
+-- | Return the title of 'WebHistoryItem'.
+webHistoryItemGetTitle :: 
+    WebHistoryItemClass self => self
+ -> IO (Maybe String) -- ^ the title or @Nothing@ in case failed.
+webHistoryItemGetTitle webhistoryitem = 
+    {#call web_history_item_get_title#} 
+      (toWebHistoryItem webhistoryitem) >>= 
+      maybePeek peekCString
+
+-- | Return the alternate title of WebHistoryItem.
+webHistoryItemGetAlternateTitle :: 
+    WebHistoryItemClass self => self 
+ -> IO (Maybe String) -- ^ the alternate title or @Nothing@ in case failed.
+webHistoryItemGetAlternateTitle webhistoryitem = 
+    {#call web_history_item_get_alternate_title#} 
+      (toWebHistoryItem webhistoryitem) >>= 
+      maybePeek peekCString
+
+-- | Set an alternate title for WebHistoryItem.
+webHistoryItemSetAlternateTitle :: 
+    WebHistoryItemClass self => self 
+ -> (Maybe String)  -- ^ @title@ - the alternate title for this history item.
+ -> IO()
+webHistoryItemSetAlternateTitle webhistoryitem title =
+    maybeWith withCString title $ \titlePtr -> 
+    {#call web_history_item_set_alternate_title#} 
+      (toWebHistoryItem webhistoryitem)
+      titlePtr
+
+-- | Return the URI of WebHistoryItem.
+webHistoryItemGetUri :: 
+    WebHistoryItemClass self => self 
+ -> IO (Maybe String) -- ^ the URI or @Nothing@ in case failed.
+webHistoryItemGetUri webhistoryitem = 
+    {#call web_history_item_get_uri#} 
+      (toWebHistoryItem webhistoryitem) >>= 
+      maybePeek peekCString
+
+-- | Return the original URI of WebHistoryItem.
+webHistoryItemGetOriginalUri :: 
+    WebHistoryItemClass self => self 
+ -> IO (Maybe String) -- ^ the URI or @Nothing@ in case failed
+webHistoryItemGetOriginalUri webhistoryitem = 
+    {#call web_history_item_get_original_uri#} 
+      (toWebHistoryItem webhistoryitem) >>= 
+      maybePeek peekCString
+
+-- | Return the last visited time of WebHistoryItem.
+webHistoryItemGetLastVisitedTime :: 
+    WebHistoryItemClass self => self 
+ -> IO Double  -- ^ the last visited time of this history item.
+webHistoryItemGetLastVisitedTime webhistoryitem = 
+    liftM realToFrac $ 
+      {#call web_history_item_get_last_visited_time#} 
+        (toWebHistoryItem webhistoryitem)
+
+-- | The title of the 'WebHistoryItem'
+--
+-- Default value: @Nothing@
+webHistoryItemTitle :: (WebHistoryItemClass self) => ReadAttr self (Maybe String)
+webHistoryItemTitle = readAttr webHistoryItemGetTitle
+
+-- | The alternate title of the history item.
+--
+-- Default value: @Nothing@
+webHistoryItemAlternateTitle :: (WebHistoryItemClass self) => Attr self (Maybe String)
+webHistoryItemAlternateTitle = newAttr webHistoryItemGetAlternateTitle webHistoryItemSetAlternateTitle
+
+-- | The URI of the history item.
+--
+-- Default value: @Nothing@
+webHistoryItemUri :: (WebHistoryItemClass self) => ReadAttr self (Maybe String)
+webHistoryItemUri = readAttr webHistoryItemGetUri
+
+-- | The original URI of the history item.
+--
+-- Default value: @Nothing@
+webHistoryItemOriginalUri :: (WebHistoryItemClass self) => ReadAttr self (Maybe String)
+webHistoryItemOriginalUri = readAttr webHistoryItemGetOriginalUri
+
+-- | The time at which the history item was last visited.
+--
+-- Allowed values: >= 0
+--
+-- Default value: 0
+webHistoryItemLastVisitedTime :: (WebHistoryItemClass self) => ReadAttr self Double
+webHistoryItemLastVisitedTime = readAttr webHistoryItemGetLastVisitedTime
+ 
diff --git a/Graphics/UI/Gtk/WebKit/WebInspector.chs b/Graphics/UI/Gtk/WebKit/WebInspector.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebInspector.chs
@@ -0,0 +1,143 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebInspector
+--  Author      :  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit Inspector
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebInspector (
+-- * Types
+  WebInspector,
+
+-- * Methods
+  webInspectorGetInspectedUri,
+  webInspectorGetWebView,
+
+-- * Attribute  
+  webInspectorInspectedUri,
+  webInspectorJSProfilingEnable,
+  webInspectorWebView,
+
+-- * Signals
+  attachWindow,
+  detachWindow,
+  closeWindow,
+  showWindow,
+  finished,
+  inspectWebView,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import System.Glib.Attributes
+import System.Glib.Properties
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import Graphics.UI.Gtk.WebKit.Internal#}
+{#import Graphics.UI.Gtk.WebKit.Signals#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+
+------------------
+-- |  Obtains the URI that is currently being inspected
+webInspectorGetInspectedUri :: 
+    WebInspectorClass self => self
+ -> IO String
+webInspectorGetInspectedUri inspector = 
+    {#call web_inspector_get_inspected_uri#} (toWebInspector inspector) >>= peekCString
+
+-- | Obtains the 'WebView' that is used to render the 'WebInspector'. 
+-- 
+-- The 'WebView' instance is created by the application,
+-- by handling the "inspect-web-view" signal. 
+-- This means that it may return @Nothing@ if the user hasn't inspected anything
+webInspectorGetWebView :: 
+    WebInspectorClass self => self
+ -> IO (Maybe WebView)
+webInspectorGetWebView inspector =
+    maybeNull (makeNewObject mkWebView) $ liftM castPtr $
+      {#call web_inspector_get_web_view#}
+        (toWebInspector inspector)
+
+-- * Attribute
+
+-- | The URI that is currently being inspected.
+webInspectorInspectedUri :: (WebInspectorClass self) => ReadAttr self String
+webInspectorInspectedUri = readAttr webInspectorGetInspectedUri
+
+-- | This is enabling JavaScript profiling in the Inspector. This means that Console.profiles will return the profiles.
+webInspectorJSProfilingEnable :: (WebInspectorClass self) => Attr self Bool
+webInspectorJSProfilingEnable = newAttrFromBoolProperty "javascript-profiling-enabled"
+
+-- | The Web View that renders the Web Inspector itself.
+webInspectorWebView :: (WebInspectorClass self) => ReadAttr self WebView
+webInspectorWebView = 
+  readAttrFromObjectProperty "web-view"
+  {#call pure webkit_web_view_get_type#}
+
+-- * Signals
+
+-- | Emitted when the inspector should appear in a separate window
+--
+-- return True if the signal is handled
+attachWindow :: WebInspectorClass self => Signal self (IO Bool)
+attachWindow = Signal (connect_NONE__BOOL "attach-window")
+
+-- | Emitted when the inspector should appear in a separate window.
+--
+-- return True if the signal has been handled                  
+detachWindow :: WebInspectorClass self => Signal self (IO Bool)
+detachWindow = Signal (connect_NONE__BOOL "detach-window")
+
+-- | Emitted when the inspector window should be closed. 
+--
+-- return True if the signal is handled.
+closeWindow :: WebInspectorClass self => Signal self (IO Bool)
+closeWindow = Signal (connect_NONE__BOOL "close-window")
+
+-- | Emitted when the inspector window should be displayed. 
+-- Notice that the window must have been created already by handling 'inspectWebView'.
+--
+-- return True if the signal has been handled                  
+showWindow :: WebInspectorClass self => Signal self (IO Bool)
+showWindow = Signal (connect_NONE__BOOL "show-window")
+
+-- | Emitted when the inspection is done. You should release your references on the inspector at this time. 
+-- The inspected 'WebView' may no longer exist when this signal is emitted.
+finished :: WebInspectorClass self => Signal self (IO ())
+finished = Signal (connect_NONE__NONE "finished")
+
+-- | Emitted when the user activates the 'inspect' context menu item to inspect a web view. 
+-- The application which is interested in the inspector should create a window, 
+-- or otherwise add the 'WebView' it creates to an existing window.
+--
+-- You don't need to handle the reference count of the 'WebView' instance you create; 
+-- the widget to which you add it will do that.
+inspectWebView :: WebInspectorClass self => Signal self (WebView -> IO WebView)
+inspectWebView = Signal (connect_OBJECT__OBJECTPTR "inspect-web-view")
diff --git a/Graphics/UI/Gtk/WebKit/WebNavigationAction.chs b/Graphics/UI/Gtk/WebKit/WebNavigationAction.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebNavigationAction.chs
@@ -0,0 +1,120 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebNavigationAction
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit NavigationAction
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebNavigationAction (
+-- * Types
+  WebNavigationAction,
+
+-- * Enums
+  NavigationReason(..),
+
+-- * Methods  
+  webNavigationActionGetButton,
+  webNavigationActionGetModifierState,
+  webNavigationActionGetOriginalUri,
+  webNavigationActionSetOriginalUri,
+  webNavigationActionGetReason,
+  webNavigationActionSetReason,
+  webNavigationActionGetTargetFrame,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- * Enums
+
+{#enum WebNavigationReason as NavigationReason {underscoreToCase}#}
+
+-- * Methods
+
+-- | Returns the DOM identifier for the mouse button used to click. 
+-- DOM button values are 0, 1 and 2 for left, middle and right buttons. 
+-- If the action was not initiated by a mouse click, returns -1.
+webNavigationActionGetButton :: 
+   WebNavigationActionClass self => self
+ -> IO Int
+webNavigationActionGetButton action =  
+    liftM fromIntegral $ {#call web_navigation_action_get_button#} (toWebNavigationAction action)
+
+-- | Returns a bitmask with the the state of the modifier keys.
+webNavigationActionGetModifierState ::  
+   WebNavigationActionClass self => self
+ -> IO Int   
+webNavigationActionGetModifierState action = 
+    liftM fromIntegral $ {#call web_navigation_action_get_modifier_state#} (toWebNavigationAction action)
+  
+-- | Returns the URI that was originally requested. 
+-- This may differ from the navigation target, for instance because of a redirect.
+webNavigationActionGetOriginalUri ::   
+   WebNavigationActionClass self => self
+ -> IO String
+webNavigationActionGetOriginalUri action = 
+    {#call web_navigation_action_get_original_uri#} (toWebNavigationAction action) >>= peekCString
+  
+-- | Returns the reason why WebKit is requesting a navigation.
+webNavigationActionGetReason ::
+   WebNavigationActionClass self => self
+ -> IO NavigationReason  
+webNavigationActionGetReason action = 
+    liftM (toEnum . fromIntegral) $ {#call web_navigation_action_get_reason#} (toWebNavigationAction action)
+
+-- | Returns the target frame of the action.
+webNavigationActionGetTargetFrame ::  
+   WebNavigationActionClass self => self
+ -> IO String
+webNavigationActionGetTargetFrame action = 
+    {#call web_navigation_action_get_target_frame#} (toWebNavigationAction action) >>= peekCString
+  
+-- | Sets the URI that was originally requested. 
+-- This may differ from the navigation target, for instance because of a redirect.
+webNavigationActionSetOriginalUri ::
+   WebNavigationActionClass self => self
+ -> String
+ -> IO ()
+webNavigationActionSetOriginalUri action uri =
+    withCString uri $ \uriPtr -> 
+        {#call web_navigation_action_set_original_uri#} 
+        (toWebNavigationAction action)
+        uriPtr
+
+-- | Sets the reason why WebKit is requesting a navigation.
+webNavigationActionSetReason ::
+   WebNavigationActionClass self => self
+ -> NavigationReason
+ -> IO ()
+webNavigationActionSetReason action reason =
+    {#call web_navigation_action_set_reason#} (toWebNavigationAction action) (fromIntegral (fromEnum reason))
+  
diff --git a/Graphics/UI/Gtk/WebKit/WebPolicyDecision.chs b/Graphics/UI/Gtk/WebKit/WebPolicyDecision.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebPolicyDecision.chs
@@ -0,0 +1,71 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebPolicyDecision
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit PolicyDecision
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebPolicyDecision (
+-- * Types
+  WebPolicyDecision,
+
+-- * Methods  
+  webPolicyDecisionDownload,
+  webPolicyDecisionIgnore,
+  webPolicyDecisionUse,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- * Methods
+
+-- | Will send the DOWNLOAD decision to the policy implementer.
+webPolicyDecisionDownload :: 
+   WebPolicyDecisionClass self => self
+ -> IO ()   
+webPolicyDecisionDownload pd =
+  {#call web_policy_decision_download#} (toWebPolicyDecision pd)
+
+-- | Will send the IGNORE decision to the policy implementer.
+webPolicyDecisionIgnore ::
+   WebPolicyDecisionClass self => self  
+ -> IO ()
+webPolicyDecisionIgnore pd =
+  {#call web_policy_decision_ignore#} (toWebPolicyDecision pd)
+
+-- | Will send the USE decision to the policy implementer.
+webPolicyDecisionUse ::
+   WebPolicyDecisionClass self => self
+ -> IO ()
+webPolicyDecisionUse pd =
+  {#call web_policy_decision_use#} (toWebPolicyDecision pd)
diff --git a/Graphics/UI/Gtk/WebKit/WebResource.chs b/Graphics/UI/Gtk/WebKit/WebResource.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebResource.chs
@@ -0,0 +1,99 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebResource
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Note:
+--
+-- Function `webkit_web_resource_get_data` haven't binding
+-- no idea how to handle `GString`.
+--
+-- Access to the WebKit Web Resource
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebResource (
+-- * Types
+  WebResource,
+
+-- * Constructors
+  webResourceNew,
+
+-- * Methods  
+  webResourceGetEncoding,
+  webResourceGetFrameName,
+  webResourceGetMimeType,
+  webResourceGetUri,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- | Returns a new WebKitWebResource. 
+-- The @encoding@ can be empty. 
+-- The @frameName@ can be used if the resource represents contents of an
+-- entire HTML frame, otherwise pass empty.
+webResourceNew :: String -> Int -> String -> String -> String -> String -> IO WebResource
+webResourceNew resData size uri mimeType encoding frameName =
+   withCString resData $ \dataPtr -> 
+   withCString uri $ \uriPtr ->
+   withCString mimeType $ \mimePtr ->
+   withCString encoding $ \encodingPtr ->
+   withCString frameName $ \framePtr -> 
+   constructNewGObject mkWebResource $ 
+     {#call web_resource_new#} dataPtr (fromIntegral size) uriPtr mimePtr encodingPtr framePtr
+
+-- | Get encoding.
+webResourceGetEncoding :: 
+   WebResourceClass self => self
+ -> IO String
+webResourceGetEncoding wr =
+  {#call web_resource_get_encoding#} (toWebResource wr) >>= peekCString
+
+-- | Get frame name.
+webResourceGetFrameName :: 
+   WebResourceClass self => self
+ -> IO String
+webResourceGetFrameName wr =
+  {#call web_resource_get_frame_name#} (toWebResource wr) >>= peekCString
+
+-- | Get mime type.
+webResourceGetMimeType :: 
+   WebResourceClass self => self
+ -> IO String
+webResourceGetMimeType wr =
+  {#call web_resource_get_mime_type#} (toWebResource wr) >>= peekCString
+
+-- | Get uri.
+webResourceGetUri :: 
+   WebResourceClass self => self
+ -> IO String
+webResourceGetUri wr =
+  {#call web_resource_get_uri#} (toWebResource wr) >>= peekCString
diff --git a/Graphics/UI/Gtk/WebKit/WebSettings.chs b/Graphics/UI/Gtk/WebKit/WebSettings.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebSettings.chs
@@ -0,0 +1,323 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebSettings
+--  Author      :  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Control the behaviour of a 'WebView'
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebSettings (
+-- * Types
+  WebSettings,
+
+-- * Constructors
+  webSettingsNew,
+
+-- * Methods
+  webSettingsCopy,
+  webSettingsGetUserAgent,
+
+-- * Attributes
+  webSettingsAutoLoadImages,
+  webSettingsAutoShrinkImages,
+  webSettingsCursiveFontFamily,
+  webSettingsDefaultEncoding,
+  webSettingsDefaultFontFamily,
+  webSettingsDefaultFontSize,
+  webSettingsDefaultMonospaceFontSize,
+  webSettingsEditingBehavior,
+  webSettingsEnableCaretBrowsing,
+  webSettingsEnableDeveloperExtras,
+  webSettingsEnableHtml5Database,
+  webSettingsEnableHtml5LocalStorage,
+  webSettingsEnableOfflineWebApplicationCache,
+  webSettingsEnablePlugins,
+  webSettingsEnablePrivateBrowsing,
+  webSettingsEnableScripts,
+  webSettingsEnableSpellChecking,
+  webSettingsEnableUniversalAccessFromFileUris,
+  webSettingsEnableXssAuditor,
+  webSettingsEnforce96Dpi,
+  webSettingsFantasyFontFamily,
+  webSettingsJSCanOpenWindowAuto,
+  webSettingsMinimumFontSize,
+  webSettingsMinimumLogicalFontSize,
+  webSettingsMonospaceFontFamily,
+  webSettingsPrintBackgrounds,
+  webSettingsResizableTextAreas,
+  webSettingsSansFontFamily,
+  webSettingsSerifFontFamily,
+  webSettingsSpellCheckingLang,
+  webSettingsUserAgent,
+  webSettingsUserStylesheetUri,
+  webSettingsZoomStep,
+  webSettingsEnableSiteSpecificQuirks,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import System.Glib.Properties
+import System.Glib.Attributes
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+{#enum EditingBehavior {underscoreToCase}#}
+------------------
+-- Constructors
+
+
+-- | Create a new 'WebSettings' instance.
+-- 
+-- A 'WebSettings' can be applied to a 'WebView'
+-- to control the to be used text encoding, color, font size, 
+-- printing mode,script support, loading of images and various other things.
+webSettingsNew :: IO WebSettings
+webSettingsNew = 
+    constructNewGObject mkWebSettings $ {#call web_settings_new#}
+
+
+-- | Copy an existing 'WebSettings' instance.
+webSettingsCopy :: 
+    WebSettingsClass self => self
+ -> IO WebSettings
+webSettingsCopy websettings = 
+    constructNewGObject mkWebSettings $ {#call web_settings_copy#} (toWebSettings websettings)
+
+-- | Return the User-Agent string currently used.
+webSettingsGetUserAgent :: 
+    WebSettingsClass self => self
+ -> IO (Maybe String) -- ^ User-Agent string or @Nothing@ in case failed.
+webSettingsGetUserAgent websettings = 
+    {#call web_settings_get_user_agent#} (toWebSettings websettings) >>= maybePeek peekCString
+
+-- | Load images automatically
+--
+-- Default value: True
+webSettingsAutoLoadImages :: (WebSettingsClass self) => Attr self Bool
+webSettingsAutoLoadImages = newAttrFromBoolProperty "auto-load-images"
+
+-- | Automatically shrink standalone images to fit
+--
+-- Default value: True
+webSettingsAutoShrinkImages :: (WebSettingsClass self) => Attr self Bool
+webSettingsAutoShrinkImages = newAttrFromBoolProperty "auto-shrink-images"
+
+-- | The default Cursive font family used to display text
+--
+-- Default value "serif"
+webSettingsCursiveFontFamily :: (WebSettingsClass self) => Attr self String
+webSettingsCursiveFontFamily = newAttrFromStringProperty "cursive-font-family"
+
+-- | The default encoding used to display text
+--
+-- Default value "iso-8859-1"
+
+webSettingsDefaultEncoding :: (WebSettingsClass self) => Attr self String
+webSettingsDefaultEncoding = newAttrFromStringProperty "default-encoding"
+
+-- | The default font family used to display text
+--
+-- Default value: "sans-serif"
+
+webSettingsDefaultFontFamily :: (WebSettingsClass self) => Attr self String
+webSettingsDefaultFontFamily = newAttrFromStringProperty "default-font-family"
+
+-- | The default font size used to display text
+--
+-- Default value: >=5
+
+webSettingsDefaultFontSize :: (WebSettingsClass self) => Attr self Int
+webSettingsDefaultFontSize = newAttrFromIntProperty "default-font-size"
+
+-- | The default font size used to display monospace text
+--
+-- Allowed values: >= 5
+-- 
+-- Default value: 10
+
+webSettingsDefaultMonospaceFontSize :: (WebSettingsClass self) => Attr self Int
+webSettingsDefaultMonospaceFontSize = newAttrFromIntProperty "default-monospace-font-size"
+
+-- | This settings controls various editing behaviors
+webSettingsEditingBehavior :: (WebSettingsClass self) => Attr self EditingBehavior
+webSettingsEditingBehavior = newAttrFromEnumProperty "editing-behavior"
+        {#call pure unsafe webkit_editing_behavior_get_type#}
+-- | Whether to enable caret browsing mode.
+webSettingsEnableCaretBrowsing :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableCaretBrowsing = newAttrFromBoolProperty "enable-caret-browsing"
+
+-- | Whether developer extensions should be enabled.
+--
+-- This enables, for now, the 'WebInspector'
+webSettingsEnableDeveloperExtras :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableDeveloperExtras = newAttrFromBoolProperty "enable-developer-extras"
+
+-- | Whether to enable HTML5 client-side SQL database support.
+webSettingsEnableHtml5Database :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableHtml5Database = newAttrFromBoolProperty "enable-html5-database"
+
+-- | Whether to enable HTML5 localStorage support.
+webSettingsEnableHtml5LocalStorage :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableHtml5LocalStorage = newAttrFromBoolProperty "enable-html5-local-storage"
+
+-- | Whether to enable HTML5 offline web application cache support.
+webSettingsEnableOfflineWebApplicationCache :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableOfflineWebApplicationCache = newAttrFromBoolProperty "enable-offline-web-application-cache"
+
+-- | Enable embedded plugin objects.
+webSettingsEnablePlugins :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnablePlugins = newAttrFromBoolProperty "enable-plugins"
+
+-- | Whether to enable private browsing mode.
+webSettingsEnablePrivateBrowsing :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnablePrivateBrowsing = newAttrFromBoolProperty "enable-private-browsing"
+
+-- | Enable embedded scripting languages
+webSettingsEnableScripts :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableScripts = newAttrFromBoolProperty "enable-scripts"
+
+-- | Whether to enable speel checking while typing.
+webSettingsEnableSpellChecking :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableSpellChecking = newAttrFromBoolProperty "enable-spell-checking"
+
+-- | Whether to allow files loaded through file:// URLs universal access to all pages.
+webSettingsEnableUniversalAccessFromFileUris :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableUniversalAccessFromFileUris = newAttrFromBoolProperty "enable-universal-access-from-file-uris"
+
+-- | Whether to enable the XSS Auditor.
+--
+-- This feature filters some kinds of reflective XSS attacks on vulnerable web sites.
+webSettingsEnableXssAuditor :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnableXssAuditor = newAttrFromBoolProperty "enable-xss-auditor"
+
+-- | Enforce a resolution of 96 DPI.
+webSettingsEnforce96Dpi :: (WebSettingsClass self) => Attr self Bool
+webSettingsEnforce96Dpi = newAttrFromBoolProperty "enforce-96-dpi"
+
+-- | The default Fantasy font family used to display text
+webSettingsFantasyFontFamily :: (WebSettingsClass self) => Attr self Bool
+webSettingsFantasyFontFamily = newAttrFromBoolProperty "fantasy-font-family"
+
+-- | Whether JavaScript can open popup windows automatically without user intervention.
+webSettingsJSCanOpenWindowAuto :: (WebSettingsClass self) => Attr self Bool
+webSettingsJSCanOpenWindowAuto = newAttrFromBoolProperty "javascript-can-open-windows-automatically"
+
+-- | The minimum font size used to display text.
+-- 
+-- Allowed values: >=1
+--
+-- Default value: 5
+webSettingsMinimumFontSize :: (WebSettingsClass self) => Attr self Int
+webSettingsMinimumFontSize = newAttrFromIntProperty "minimum-font-size"
+
+-- | The minimum logical font size used to display text
+--
+-- Allowed values: >=1
+--
+-- Default value: 5
+webSettingsMinimumLogicalFontSize :: (WebSettingsClass self) => Attr self Int
+webSettingsMinimumLogicalFontSize = newAttrFromIntProperty "minimum-logical-font-size"
+
+
+-- | The default font family used to display monospace text.
+-- 
+-- Default value: "monospace"
+webSettingsMonospaceFontFamily :: (WebSettingsClass self) => Attr self String
+webSettingsMonospaceFontFamily = newAttrFromStringProperty "monospace-font-family"
+
+-- | Whether background images should be printed
+--
+-- Default value: True
+webSettingsPrintBackgrounds :: (WebSettingsClass self) => Attr self Bool
+webSettingsPrintBackgrounds = newAttrFromBoolProperty "print-backgrounds"
+
+-- | Whether text areas are resizable
+--
+-- Default value : True
+webSettingsResizableTextAreas :: (WebSettingsClass self) => Attr self Bool
+webSettingsResizableTextAreas =  newAttrFromBoolProperty "resizable-text-areas"
+
+-- | The default Sans Serif font family used to display text
+-- 
+-- Default value "sans-serif"
+webSettingsSansFontFamily :: (WebSettingsClass self) => Attr self String
+webSettingsSansFontFamily = newAttrFromStringProperty "sans-serif-font-family"
+
+
+-- | The default Serif font family used to display text
+--
+-- Default value: "serif"
+webSettingsSerifFontFamily :: (WebSettingsClass self) => Attr self String
+webSettingsSerifFontFamily = newAttrFromStringProperty "serif-font-family"
+
+
+-- | The languages to be used for spell checking, separated by commas
+-- 
+-- The locale string typically is in the form lang_COUNTRY,
+-- where lang is an ISO-639 language code, and COUNTRY is an ISO-3166 country code. 
+-- For instance, sv_FI for Swedish as written in Finland or pt_BR for Portuguese as written in Brazil.
+--
+-- If no value is specified then the value returned by gtk_get_default_language will be used.
+--
+-- Default value: @Nothing@
+webSettingsSpellCheckingLang :: (WebSettingsClass self) => Attr self (Maybe String)
+webSettingsSpellCheckingLang = newAttrFromMaybeStringProperty "spell-checking-languages"
+
+-- | The User-Agent string used by WebKit
+-- 
+-- This will return a default User-Agent string if a custom string wasn't provided by the application. 
+-- Setting this property to a NULL value or an empty string will result in 
+-- the User-Agent string being reset to the default value.
+--
+-- Default value: \"Mozilla/5.0 (X11; U; Linux x86_64; c) AppleWebKit/531.2+ (KHTML, like Gecko) Safari/531.2+\"
+
+webSettingsUserAgent :: (WebSettingsClass self) => Attr self String
+webSettingsUserAgent = newAttrFromStringProperty "user-agent"
+
+-- | The URI of a stylesheet that is applied to every page.
+--
+-- Default value: @Nothing@
+
+webSettingsUserStylesheetUri :: (WebSettingsClass self) => Attr self (Maybe String)
+webSettingsUserStylesheetUri = newAttrFromMaybeStringProperty "user-stylesheet-uri"
+
+-- | The value by which the zoom level is changed when zooming in or out
+--
+-- Allowed values: >= 0
+--
+-- Default value: 0.1
+webSettingsZoomStep :: (WebSettingsClass self) => Attr self Float
+webSettingsZoomStep = newAttrFromFloatProperty "zoom-step"
+                             
+-- | Enables the site-specific compatibility workarounds.
+--
+-- Default value: False
+webSettingsEnableSiteSpecificQuirks :: WebSettingsClass self => Attr self Bool
+webSettingsEnableSiteSpecificQuirks = newAttrFromBoolProperty "enable-site-specific-quirks"
+
diff --git a/Graphics/UI/Gtk/WebKit/WebView.chs b/Graphics/UI/Gtk/WebKit/WebView.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebView.chs
@@ -0,0 +1,1146 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebView
+--  Author      :  Cjacker Huang
+--  Copyright   :  (c) 2009 Cjacker Huang <jzhuang@redflag-linux.com>
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Note:
+--
+-- Signal `window-object-cleared` can't bidning now, 
+-- because it need JavaScriptCore that haven't binding.
+--
+-- Signal `create-plugin-widget` can't binding now, 
+-- no idea how to binding `GHaskellTable`
+--
+--
+-- TODO:
+--
+--   `webViewGetHitTestResult`
+--
+-- The central class of the WebKit
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebView (
+-- * Types
+  WebView,
+
+-- * Enums
+  NavigationResponse(..),
+  TargetInfo(..),
+  LoadStatus(..),
+
+-- * Constructors
+  webViewNew,
+
+-- * Methods
+  webViewLoadUri,
+  webViewLoadHtmlString,
+  webViewLoadRequest,
+  webViewLoadString,
+
+  webViewGetTitle,
+  webViewGetUri,
+
+  webViewCanGoBack,
+  webViewCanGoForward,
+  webViewGoBack,
+  webViewGoForward,
+  webViewGetBackForwardList,
+  webViewSetMaintainsBackForwardList,
+  webViewGoToBackForwardItem,
+  webViewCanGoBackOrForward,
+  webViewGoBackOrForward,
+
+
+  webViewGetZoomLevel,
+  webViewSetZoomLevel,
+  webViewZoomIn,
+  webViewZoomOut,
+  webViewGetFullContentZoom,
+  webViewSetFullContentZoom,
+
+  webViewStopLoading,
+  webViewReload,
+  webViewReloadBypassCache,
+
+  webViewExecuteScript,
+
+  webViewCanCutClipboard,
+  webViewCanCopyClipboard,
+  webViewCanPasteClipboard,
+  webViewCutClipboard,
+  webViewCopyClipboard,
+  webViewPasteClipboard,
+
+  webViewCanRedo,
+  webViewCanUndo,
+  webViewRedo,
+  webViewUndo,
+  
+  webViewCanShowMimeType,
+  webViewGetEditable,
+  webViewSetEditable,
+  webViewGetInspector,
+  webViewGetTransparent,
+  webViewSetTransparent,
+  webViewGetViewSourceMode,
+  webViewSetViewSourceMode,
+
+  webViewDeleteSelection,
+  webViewHasSelection,
+  webViewSelectAll,
+
+  webViewGetEncoding,
+  webViewSetCustomEncoding,
+  webViewGetCustomEncoding,
+  webViewGetProgress,
+
+  webViewGetCopyTargetList,
+  webViewGetPasteTargetList,
+
+  webViewSearchText,
+  webViewMarkTextMatches,
+  webViewUnMarkTextMatches,
+  webViewSetHighlightTextMatches,
+
+  webViewMoveCursor,
+
+  webViewGetMainFrame,
+  webViewGetFocusedFrame,
+
+  webViewSetWebSettings,
+  webViewGetWebSettings,
+
+  webViewGetWindowFeatures,
+
+-- * Attributes
+  webViewZoomLevel,
+  webViewFullContentZoom,
+  webViewEncoding,
+  webViewCustomEncoding,
+  webViewLoadStatus,
+  webViewProgress,
+  webViewTitle,
+  webViewInspector,
+  webViewWebSettings,
+  webViewViewSourceMode,
+  webViewTransparent,
+  webViewEditable,
+  webViewUri,
+  webViewCopyTargetList,
+  webViewPasteTargetList,
+  webViewWindowFeatures,
+ 
+-- * Signals
+  loadStarted,
+  loadCommitted,
+  progressChanged,
+  loadFinished,
+  loadError,
+  titleChanged,
+  hoveringOverLink,
+  createWebView,
+  webViewReady,
+  closeWebView,
+  consoleMessage,
+  copyClipboard,
+  cutClipboard,
+  pasteClipboard,
+  populatePopup,
+  printRequested,
+  scriptAlert,
+  scriptConfirm,
+  scriptPrompt,
+  statusBarTextChanged,
+  selectAll,
+  selectionChanged,
+  setScrollAdjustments,
+  databaseQuotaExceeded,
+  documentLoadFinished,
+  downloadRequested,
+  iconLoaded,
+  redo,
+  undo,
+  mimeTypePolicyDecisionRequested,
+  moveCursor,
+  navigationPolicyDecisionRequested,
+  newWindowPolicyDecisionRequested,
+  resourceRequestStarting,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.Attributes
+import System.Glib.Properties
+import System.Glib.GError 
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import Graphics.UI.Gtk.WebKit.Signals#}
+{#import Graphics.UI.Gtk.WebKit.Internal#}
+{#import System.Glib.GObject#}
+{#import Graphics.UI.Gtk.General.Selection#} ( TargetList )
+{#import Graphics.UI.Gtk.MenuComboToolbar.Menu#}
+{#import Graphics.UI.Gtk.General.Enums#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+------------------
+-- Enums
+
+{#enum NavigationResponse {underscoreToCase}#}
+
+{#enum WebViewTargetInfo as TargetInfo {underscoreToCase}#}
+
+{#enum LoadStatus {underscoreToCase}#}
+
+------------------
+-- Constructors
+
+
+-- | Create a new 'WebView' widget.
+-- 
+-- It is a 'Widget' you can embed in a 'ScrolledWindow'.
+-- 
+-- You can load any URI into the 'WebView' or any kind of data string.
+webViewNew :: IO WebView 
+webViewNew =  do
+  isGthreadInited <- liftM toBool {#call g_thread_get_initialized#}
+  if not isGthreadInited then {#call g_thread_init#} nullPtr 
+    else return ()
+  makeNewObject mkWebView $ liftM castPtr {#call web_view_new#}
+
+
+-- | Apply 'WebSettings' to a given 'WebView'
+-- 
+-- !!NOTE!!, currently lack of useful APIs of 'WebSettings' in webkitgtk.
+-- If you want to set the encoding, font family or font size of the 'WebView',
+-- please use related functions.
+
+webViewSetWebSettings :: 
+    (WebViewClass self, WebSettingsClass settings) => self
+ -> settings
+ -> IO ()
+webViewSetWebSettings webview websettings = 
+    {#call web_view_set_settings#} (toWebView webview) (toWebSettings websettings)
+
+-- | Return the 'WebSettings' currently used by 'WebView'.
+webViewGetWebSettings :: 
+    WebViewClass self => self
+ -> IO WebSettings
+webViewGetWebSettings webview = 
+    makeNewGObject mkWebSettings $ {#call web_view_get_settings#} (toWebView webview)
+
+-- | Returns the instance of WebKitWebWindowFeatures held by the given WebKitWebView.
+webViewGetWindowFeatures ::
+   WebViewClass self => self
+ -> IO WebWindowFeatures   
+webViewGetWindowFeatures webview =
+  makeNewGObject mkWebWindowFeatures $ {#call web_view_get_window_features#} (toWebView webview)
+
+-- | Return the main 'WebFrame' of the given 'WebView'.
+webViewGetMainFrame :: 
+    WebViewClass self => self
+ -> IO WebFrame
+webViewGetMainFrame webview = 
+    makeNewGObject mkWebFrame  $ {#call web_view_get_main_frame#} (toWebView webview)
+
+-- | Return the focused 'WebFrame' of the given 'WebView'.
+webViewGetFocusedFrame :: 
+    WebViewClass self => self
+ -> IO WebFrame
+webViewGetFocusedFrame webview = 
+    makeNewGObject mkWebFrame $ {#call web_view_get_focused_frame#} (toWebView webview)
+
+
+-- |Requests loading of the specified URI string in a 'WebView'
+webViewLoadUri :: 
+    WebViewClass self => self 
+ -> String  -- ^ @uri@ - an URI string.
+ -> IO()
+webViewLoadUri webview url =
+    withCString url $ \urlPtr -> {#call web_view_load_uri#}
+    (toWebView webview)
+    urlPtr
+
+-- |Determine whether 'WebView' has a previous history item.
+webViewCanGoBack :: 
+    WebViewClass self => self
+ -> IO Bool -- ^ True if able to move back, False otherwise.
+webViewCanGoBack webview = 
+    liftM toBool $ {#call web_view_can_go_back#} (toWebView webview)
+
+-- |Determine whether 'WebView' has a next history item.
+webViewCanGoForward :: 
+    WebViewClass self => self 
+ -> IO Bool -- ^ True if able to move forward, False otherwise.
+webViewCanGoForward webview = 
+    liftM toBool $ {#call web_view_can_go_forward#} (toWebView webview)
+
+-- |Loads the previous history item.
+webViewGoBack :: 
+    WebViewClass self => self
+ -> IO () 
+webViewGoBack webview =
+    {#call web_view_go_back#} (toWebView webview)
+
+-- |Loads the next history item.
+webViewGoForward :: 
+    WebViewClass self => self
+ -> IO ()
+webViewGoForward webview =
+    {#call web_view_go_forward#} (toWebView webview)
+
+-- |Set the 'WebView' to maintian a back or forward list of history items.
+webViewSetMaintainsBackForwardList :: 
+    WebViewClass self => self 
+ -> Bool -- ^ @flag@ - to tell the view to maintain a back or forward list. 
+ -> IO()
+webViewSetMaintainsBackForwardList webview flag = 
+    {#call web_view_set_maintains_back_forward_list#} 
+      (toWebView webview)
+      (fromBool flag)
+
+-- |Return the 'WebBackForwardList'
+webViewGetBackForwardList :: 
+    WebViewClass self => self
+ -> IO WebBackForwardList
+webViewGetBackForwardList webview = 
+    makeNewGObject mkWebBackForwardList $ 
+      {#call web_view_get_back_forward_list#} 
+        (toWebView webview)
+
+-- |Go to the specified 'WebHistoryItem'
+
+webViewGoToBackForwardItem :: 
+    (WebViewClass self, WebHistoryItemClass item) => self 
+ -> item
+ -> IO Bool -- ^ True if loading of item is successful, False if not.
+webViewGoToBackForwardItem webview item = 
+    liftM toBool $ {#call web_view_go_to_back_forward_item#} (toWebView webview) (toWebHistoryItem item)
+
+-- |Determines whether 'WebView' has a history item of @steps@.
+--
+-- Negative values represent steps backward while positive values
+-- represent steps forward
+
+webViewCanGoBackOrForward :: 
+    WebViewClass self => self
+ -> Int -- ^ @steps@ - the number of steps 
+ -> IO Bool -- ^ True if able to move back or forward the given number of steps,
+            -- False otherwise
+webViewCanGoBackOrForward webview steps =
+    liftM toBool $  
+      {#call web_view_can_go_back_or_forward#} 
+        (toWebView webview)
+        (fromIntegral steps)
+
+-- |Loads the history item that is the number of @steps@ away from the current item.
+--
+-- Negative values represent steps backward while positive values represent steps forward.
+
+webViewGoBackOrForward :: 
+    WebViewClass self => self
+ -> Int
+ -> IO ()
+webViewGoBackOrForward webview steps =
+    {#call web_view_go_back_or_forward#} 
+      (toWebView webview)
+      (fromIntegral steps)
+
+-- |Determines whether or not it is currently possible to redo the last editing command in the view
+webViewCanRedo :: 
+    WebViewClass self => self
+ -> IO Bool
+webViewCanRedo webview = 
+    liftM toBool $
+      {#call web_view_can_redo#} (toWebView webview)
+-- |Determines whether or not it is currently possible to undo the last editing command in the view
+webViewCanUndo :: 
+    WebViewClass self => self
+ -> IO Bool
+webViewCanUndo webview =
+    liftM toBool $
+      {#call web_view_can_undo#} (toWebView webview)
+
+-- |Redoes the last editing command in the view, if possible.
+webViewRedo :: 
+    WebViewClass self => self
+ -> IO()
+webViewRedo webview =
+    {#call web_view_redo#} (toWebView webview)
+
+-- |Undoes the last editing command in the view, if possible.
+webViewUndo :: 
+    WebViewClass self => self
+ -> IO()
+webViewUndo webview =
+    {#call web_view_undo#} (toWebView webview)
+
+-- | Returns whether or not a @mimetype@ can be displayed using this view.
+webViewCanShowMimeType :: 
+    WebViewClass self => self
+ -> String -- ^ @mimetype@ - a MIME type
+ -> IO Bool -- ^ True if the @mimetype@ can be displayed, otherwise False
+webViewCanShowMimeType webview mime =
+    withCString mime $ \mimePtr ->
+    liftM toBool $
+      {#call web_view_can_show_mime_type#}
+      (toWebView webview)
+      mimePtr
+
+-- | Returns whether the user is allowed to edit the document.
+webViewGetEditable :: 
+    WebViewClass self => self
+ -> IO Bool
+webViewGetEditable webview =
+    liftM toBool $
+      {#call web_view_get_editable#} (toWebView webview)
+
+-- | Sets whether allows the user to edit its HTML document.
+webViewSetEditable :: 
+    WebViewClass self => self
+ -> Bool
+ -> IO ()
+webViewSetEditable webview editable =
+    {#call web_view_set_editable#} (toWebView webview) (fromBool editable)
+
+-- | Returns whether 'WebView' is in view source mode
+webViewGetViewSourceMode :: 
+    WebViewClass self => self
+ -> IO Bool
+webViewGetViewSourceMode webview =
+    liftM toBool $
+      {#call web_view_get_view_source_mode#} (toWebView webview)
+
+-- | Set whether the view should be in view source mode. 
+--
+-- Setting this mode to TRUE before loading a URI will display 
+-- the source of the web page in a nice and readable format.
+webViewSetViewSourceMode :: 
+    WebViewClass self => self
+ -> Bool
+ -> IO ()
+webViewSetViewSourceMode webview mode =
+    {#call web_view_set_view_source_mode#} (toWebView webview) (fromBool mode)
+
+-- | Returns whether the 'WebView' has a transparent background
+webViewGetTransparent :: 
+    WebViewClass self => self
+ -> IO Bool
+webViewGetTransparent webview =
+    liftM toBool $
+      {#call web_view_get_transparent#} (toWebView webview)
+-- |Sets whether the WebKitWebView has a transparent background.
+--
+-- Pass False to have the 'WebView' draw a solid background (the default), 
+-- otherwise pass True.
+webViewSetTransparent :: 
+    WebViewClass self => self
+ -> Bool
+ -> IO ()
+webViewSetTransparent webview trans =
+    {#call web_view_set_transparent#} (toWebView webview) (fromBool trans)
+
+-- |Obtains the 'WebInspector' associated with the 'WebView'
+webViewGetInspector :: 
+    WebViewClass self => self
+ -> IO WebInspector
+webViewGetInspector webview =
+    makeNewGObject mkWebInspector $ {#call web_view_get_inspector#} (toWebView webview)
+
+-- |Requests loading of the specified asynchronous client request.
+--
+-- Creates a provisional data source that will transition to a committed data source once
+-- any data has been received. 
+-- use 'webViewStopLoading' to stop the load.
+
+webViewLoadRequest :: 
+    (WebViewClass self, NetworkRequestClass request) => self
+ -> request
+ -> IO()
+webViewLoadRequest webview request =
+    {#call web_view_load_request#} (toWebView webview) (toNetworkRequest request)
+
+
+
+
+-- |Returns the zoom level of 'WebView'
+--
+-- i.e. the factor by which elements in the page are scaled with respect to their original size.
+
+webViewGetZoomLevel :: 
+    WebViewClass self => self
+ -> IO Float -- ^ the zoom level of 'WebView'
+webViewGetZoomLevel webview =
+    liftM realToFrac $
+	{#call web_view_get_zoom_level#} (toWebView webview)
+
+-- |Sets the zoom level of 'WebView'.
+webViewSetZoomLevel :: 
+    WebViewClass self => self 
+ -> Float -- ^ @zoom_level@ - the new zoom level 
+ -> IO ()
+webViewSetZoomLevel webview zlevel = 
+    {#call web_view_set_zoom_level#} (toWebView webview) (realToFrac zlevel)
+
+-- |Loading the @content@ string as html. The URI passed in base_uri has to be an absolute URI.
+
+webViewLoadHtmlString :: 
+    WebViewClass self => self 
+ -> String  -- ^ @content@ - the html string
+ -> String  -- ^ @base_uri@ - the base URI
+ -> IO()
+webViewLoadHtmlString webview htmlstr url =
+    withCString htmlstr $ \htmlPtr ->
+    withCString url  $ \urlPtr ->
+        {#call web_view_load_html_string#} (toWebView webview) htmlPtr urlPtr
+
+-- | Requests loading of the given @content@ with the specified @mime_type@, @encoding@ and @base_uri@.
+-- 
+-- If @mime_type@ is @Nothing@, "text/html" is assumed.
+--
+-- If @encoding@ is @Nothing@, "UTF-8" is assumed.
+--
+webViewLoadString :: 
+    WebViewClass self => self 
+ -> String -- ^ @content@ - the content string to be loaded.
+ -> (Maybe String) -- ^ @mime_type@ - the MIME type or @Nothing@. 
+ -> (Maybe String) -- ^ @encoding@ - the encoding or @Nothing@.
+ -> String -- ^ @base_uri@ - the base URI for relative locations.
+ -> IO()
+webViewLoadString webview content mimetype encoding baseuri = 
+    withCString content  $ \contentPtr ->
+    maybeWith withCString mimetype $ \mimetypePtr ->
+    maybeWith withCString encoding $ \encodingPtr ->
+    withCString baseuri  $ \baseuriPtr ->
+        {#call web_view_load_string#} 
+          (toWebView webview)
+          contentPtr
+          mimetypePtr
+          encodingPtr
+          baseuriPtr
+
+-- |Returns the 'WebView' document title
+webViewGetTitle :: 
+    WebViewClass self => self
+ -> IO (Maybe String) -- ^ the title of 'WebView' or Nothing in case of failed.
+webViewGetTitle webview =
+    {#call web_view_get_title#} (toWebView webview) >>= maybePeek peekCString
+
+-- |Returns the current URI of the contents displayed by the 'WebView'
+webViewGetUri :: 
+    WebViewClass self => self
+ -> IO (Maybe String) -- ^ the URI of 'WebView' or Nothing in case of failed.
+webViewGetUri webview = 
+    {#call web_view_get_uri#} (toWebView webview) >>= maybePeek peekCString 
+
+
+-- | Stops and pending loads on the given data source.
+webViewStopLoading :: 
+    WebViewClass self => self
+ -> IO ()
+webViewStopLoading webview = 
+    {#call web_view_stop_loading#} (toWebView webview)
+
+-- | Reloads the 'WebView'
+webViewReload :: 
+    WebViewClass self => self
+ -> IO ()
+webViewReload webview = 
+    {#call web_view_reload#} (toWebView webview)
+
+-- | Reloads the 'WebView' without using any cached data.
+webViewReloadBypassCache :: 
+    WebViewClass self => self
+ -> IO()
+webViewReloadBypassCache webview = 
+    {#call web_view_reload_bypass_cache#} (toWebView webview)
+
+-- | Increases the zoom level of 'WebView'.
+webViewZoomIn :: 
+    WebViewClass self => self
+ -> IO()
+webViewZoomIn webview = 
+    {#call web_view_zoom_in#} (toWebView webview)
+
+-- | Decreases the zoom level of 'WebView'.
+webViewZoomOut :: 
+    WebViewClass self => self
+ -> IO()
+webViewZoomOut webview = 
+    {#call web_view_zoom_out#} (toWebView webview)
+
+-- | Looks for a specified string inside 'WebView'
+webViewSearchText :: 
+    WebViewClass self => self
+ -> String -- ^ @text@ - a string to look for
+ -> Bool -- ^ @case_sensitive@ - whether to respect the case of text
+ -> Bool -- ^ @forward@ - whether to find forward or not
+ -> Bool -- ^ @wrap@ - whether to continue looking at beginning
+         -- after reaching the end
+ -> IO Bool -- ^ True on success or False on failure
+webViewSearchText webview text case_sensitive forward wrap =
+    withCString text $ \textPtr ->
+	liftM toBool $
+          {#call web_view_search_text#} 
+            (toWebView webview)
+            textPtr
+            (fromBool case_sensitive) 
+            (fromBool forward) 
+            (fromBool wrap)
+
+-- |Attempts to highlight all occurances of string inside 'WebView'
+webViewMarkTextMatches :: 
+    WebViewClass self => self
+ -> String -- ^ @string@ - a string to look for
+ -> Bool  -- ^ @case_sensitive@ - whether to respect the case of text
+ -> Int  -- ^ @limit@ - the maximum number of strings to look for or 0 for all
+ -> IO Int -- ^ the number of strings highlighted
+webViewMarkTextMatches webview text case_sensitive limit = 
+    withCString text $ \textPtr ->
+	liftM fromIntegral $ 
+          {#call web_view_mark_text_matches#} 
+            (toWebView webview)
+            textPtr
+            (fromBool case_sensitive)
+            (fromIntegral limit)
+
+-- | Move the cursor in view as described by step and count.
+webViewMoveCursor ::
+   WebViewClass self => self
+ -> MovementStep
+ -> Int
+ -> IO ()   
+webViewMoveCursor webview step count =
+  {#call web_view_move_cursor#} (toWebView webview) (fromIntegral $ fromEnum step) (fromIntegral count)
+
+-- | Removes highlighting previously set by 'webViewMarkTextMarches'
+webViewUnMarkTextMatches :: 
+    WebViewClass self => self
+ -> IO ()
+webViewUnMarkTextMatches webview = 
+    {#call web_view_unmark_text_matches#} (toWebView webview)
+
+-- | Highlights text matches previously marked by 'webViewMarkTextMatches'
+webViewSetHighlightTextMatches :: 
+    WebViewClass self => self
+ -> Bool -- ^ @highlight@ - whether to highlight text matches 
+ -> IO ()
+webViewSetHighlightTextMatches webview highlight =
+    {#call web_view_set_highlight_text_matches#} 
+      (toWebView webview)
+      (fromBool highlight)
+
+-- | Execute the script specified by @script@
+webViewExecuteScript :: 
+    WebViewClass self => self 
+ -> String  -- ^ @script@ - script to be executed
+ -> IO()
+webViewExecuteScript webview script =
+    withCString script $ \scriptPtr ->
+	{#call web_view_execute_script#} (toWebView webview) scriptPtr
+
+-- | Determines whether can cuts the current selection
+-- inside 'WebView' to the clipboard
+webViewCanCutClipboard :: 
+    WebViewClass self => self
+ -> IO Bool
+webViewCanCutClipboard webview = 
+    liftM toBool $ {#call web_view_can_cut_clipboard#} (toWebView webview)
+
+-- | Determines whether can copies the current selection
+-- inside 'WebView' to the clipboard
+webViewCanCopyClipboard :: WebViewClass self => self -> IO Bool
+webViewCanCopyClipboard webview = 
+    liftM toBool $ {#call web_view_can_copy_clipboard#} (toWebView webview)
+
+-- | Determines whether can pastes the current contents of the clipboard
+-- to the 'WebView'
+webViewCanPasteClipboard :: WebViewClass self => self -> IO Bool
+webViewCanPasteClipboard webview = 
+    liftM toBool $ {#call web_view_can_paste_clipboard#} (toWebView webview)
+
+-- | Cuts the current selection inside 'WebView' to the clipboard.
+webViewCutClipboard :: WebViewClass self => self -> IO()
+webViewCutClipboard webview = 
+    {#call web_view_cut_clipboard#} (toWebView webview)
+
+-- | Copies the current selection inside 'WebView' to the clipboard.
+webViewCopyClipboard :: WebViewClass self => self -> IO()
+webViewCopyClipboard webview = 
+    {#call web_view_copy_clipboard#} (toWebView webview)
+
+-- | Pastes the current contents of the clipboard to the 'WebView'
+webViewPasteClipboard :: WebViewClass self => self -> IO()
+webViewPasteClipboard webview = 
+    {#call web_view_paste_clipboard#} (toWebView webview)
+
+-- | Deletes the current selection inside the 'WebView'
+webViewDeleteSelection :: WebViewClass self => self -> IO ()
+webViewDeleteSelection webview = 
+    {#call web_view_delete_selection#} (toWebView webview)
+
+-- | Determines whether text was selected
+webViewHasSelection :: WebViewClass self => self -> IO Bool
+webViewHasSelection webview = 
+    liftM toBool $ {#call web_view_has_selection#} (toWebView webview)
+
+-- | Attempts to select everything inside the 'WebView'
+webViewSelectAll :: WebViewClass self => self -> IO ()
+webViewSelectAll webview = 
+    {#call web_view_select_all#} (toWebView webview)
+
+-- | Returns whether the zoom level affects only text or all elements.
+webViewGetFullContentZoom :: 
+    WebViewClass self => self 
+ -> IO Bool -- ^ False if only text should be scaled(the default)
+            -- True if the full content of the view should be scaled.
+webViewGetFullContentZoom webview = 
+    liftM toBool $ {#call web_view_get_full_content_zoom#} (toWebView webview)
+
+-- | Sets whether the zoom level affects only text or all elements.
+webViewSetFullContentZoom :: 
+    WebViewClass self => self 
+ -> Bool -- ^ @full_content_zoom@ - False if only text should be scaled (the default)
+         -- True if the full content of the view should be scaled. 
+ -> IO ()
+webViewSetFullContentZoom webview full =
+    {#call web_view_set_full_content_zoom#} (toWebView webview) (fromBool full)
+
+-- | Returns the default encoding of the 'WebView'
+webViewGetEncoding :: 
+    WebViewClass self => self 
+ -> IO (Maybe String) -- ^ the default encoding or @Nothing@ in case of failed
+webViewGetEncoding webview =
+    {#call web_view_get_encoding#} (toWebView webview) >>= maybePeek peekCString
+
+-- | Sets the current 'WebView' encoding, 
+-- without modifying the default one, and reloads the page
+webViewSetCustomEncoding :: 
+    WebViewClass self => self
+ -> (Maybe String) -- ^ @encoding@ - the new encoding, 
+                   -- or @Nothing@ to restore the default encoding. 
+ -> IO ()
+webViewSetCustomEncoding webview encoding = 
+    maybeWith withCString encoding $ \encodingPtr ->
+	{#call web_view_set_custom_encoding#} (toWebView webview) encodingPtr
+
+-- | Returns the current encoding of 'WebView',not the default encoding.
+webViewGetCustomEncoding :: 
+    WebViewClass self => self 
+ -> IO (Maybe String) -- ^ the current encoding string
+                      -- or @Nothing@ if there is none set.
+webViewGetCustomEncoding webview = 
+    {#call web_view_get_custom_encoding#} (toWebView webview) >>= maybePeek peekCString
+
+-- | Determines the current status of the load.
+webViewGetLoadStatus :: 
+    WebViewClass self => self 
+ -> IO LoadStatus -- ^ the current load status:'LoadStatus'
+webViewGetLoadStatus webview = 
+    liftM (toEnum . fromIntegral) $ {#call web_view_get_load_status#} (toWebView webview)
+
+-- | Determines the current progress of the load
+webViewGetProgress :: 
+    WebViewClass self => self 
+ -> IO Double -- ^ the load progress
+webViewGetProgress webview =
+    liftM realToFrac $ {#call web_view_get_progress#} (toWebView webview)
+
+-- | This function returns the list of targets this 'WebView' can provide for clipboard copying and as DND source. 
+-- The targets in the list are added with values from the 'WebViewTargetInfo' enum, 
+-- using 'targetListAdd' and 'targetListAddTextTargets'.
+webViewGetCopyTargetList ::
+   WebViewClass self => self 
+ -> IO (Maybe TargetList)
+webViewGetCopyTargetList webview = do
+  tlPtr <- {#call web_view_get_copy_target_list#} (toWebView webview)
+  if tlPtr==nullPtr then return Nothing else liftM Just (mkTargetList tlPtr)
+
+-- | This function returns the list of targets this 'WebView' can provide for clipboard pasteing and as DND source. 
+-- The targets in the list are added with values from the 'WebViewTargetInfo' enum, 
+-- using 'targetListAdd' and 'targetListAddTextTargets'.
+webViewGetPasteTargetList ::
+   WebViewClass self => self 
+ -> IO (Maybe TargetList)
+webViewGetPasteTargetList webview = do
+  tlPtr <- {#call web_view_get_paste_target_list#} (toWebView webview)
+  if tlPtr==nullPtr then return Nothing else liftM Just (mkTargetList tlPtr)
+
+-- * Attibutes
+
+-- | Zoom level of the 'WebView' instance
+webViewZoomLevel :: WebViewClass self => Attr self Float
+webViewZoomLevel = newAttr
+   webViewGetZoomLevel
+   webViewSetZoomLevel
+
+-- | Whether the full content is scaled when zooming
+--
+-- Default value: False
+webViewFullContentZoom :: WebViewClass self => Attr self Bool
+webViewFullContentZoom = newAttr
+   webViewGetFullContentZoom
+   webViewSetFullContentZoom
+
+-- | The default encoding of the 'WebView' instance
+--
+-- Default value: @Nothing@
+webViewEncoding :: WebViewClass self => ReadAttr self (Maybe String)
+webViewEncoding = readAttr webViewGetEncoding
+
+-- | Determines the current status of the load.
+--
+-- Default value: @LoadFinished@
+webViewLoadStatus :: WebViewClass self => ReadAttr self LoadStatus
+webViewLoadStatus = readAttr webViewGetLoadStatus
+
+-- |Determines the current progress of the load
+--
+-- Default Value: 1
+webViewProgress :: WebViewClass self => ReadAttr self Double
+webViewProgress = readAttr webViewGetProgress
+
+
+-- | The associated webSettings of the 'WebView' instance
+webViewWebSettings :: WebViewClass self => Attr self WebSettings
+webViewWebSettings = newAttr
+   webViewGetWebSettings
+   webViewSetWebSettings
+
+
+-- | Title of the 'WebView' instance
+webViewTitle :: WebViewClass self => ReadAttr self (Maybe String)
+webViewTitle = readAttr webViewGetTitle
+
+-- | The associated webInspector instance of the 'WebView'
+webViewInspector :: WebViewClass self => ReadAttr self WebInspector
+webViewInspector = readAttr webViewGetInspector
+
+
+-- | The custom encoding of the 'WebView' instance
+--
+-- Default value: @Nothing@
+webViewCustomEncoding :: WebViewClass self => Attr self (Maybe String)
+webViewCustomEncoding = newAttr
+   webViewGetCustomEncoding
+   webViewSetCustomEncoding
+
+-- | view source mode of the 'WebView' instance
+webViewViewSourceMode :: WebViewClass self => Attr self Bool
+webViewViewSourceMode = newAttr
+  webViewGetViewSourceMode
+  webViewSetViewSourceMode
+
+-- | transparent background of the 'WebView' instance
+webViewTransparent :: WebViewClass self => Attr self Bool
+webViewTransparent = newAttr
+  webViewGetTransparent
+  webViewSetTransparent
+
+-- | Whether content of the 'WebView' can be modified by the user
+--
+-- Default value: @False@
+webViewEditable :: WebViewClass self => Attr self Bool
+webViewEditable = newAttr
+  webViewGetEditable
+  webViewSetEditable
+
+-- | Returns the current URI of the contents displayed by the @web_view@.
+--
+-- Default value: Nothing
+webViewUri :: WebViewClass self => ReadAttr self (Maybe String)
+webViewUri = readAttr webViewGetUri
+
+-- | The list of targets this web view supports for clipboard copying.
+webViewCopyTargetList :: WebViewClass self => ReadAttr self (Maybe TargetList)
+webViewCopyTargetList = readAttr webViewGetCopyTargetList
+
+-- | The list of targets this web view supports for clipboard pasteing.
+webViewPasteTargetList :: WebViewClass self => ReadAttr self (Maybe TargetList)
+webViewPasteTargetList = readAttr webViewGetPasteTargetList
+
+-- | An associated 'WebWindowFeatures' instance.
+webViewWindowFeatures :: WebViewClass self => Attr self WebWindowFeatures
+webViewWindowFeatures = 
+  newAttrFromObjectProperty "window-features"
+  {#call pure webkit_web_window_features_get_type#}
+
+-- * Signals
+
+-- | When Document title changed, this signal is emitted.
+--
+-- It can be used to set the Application 'Window' title.
+--
+-- the user function signature is (WebFrame->String->IO())
+--
+-- webframe - which 'WebFrame' changes the document title.
+--
+-- title - current title string.
+titleChanged :: WebViewClass self => Signal self ( WebFrame -> String -> IO() )
+titleChanged = 
+    Signal (connect_OBJECT_STRING__NONE "title-changed")
+
+
+-- | When the cursor is over a link, this signal is emitted.
+-- 
+-- the user function signature is (Maybe String -> Maybe String -> IO () )
+-- 
+-- title - the link's title or @Nothing@ in case of failure.
+--
+-- uri - the URI the link points to or @Nothing@ in case of failure.
+hoveringOverLink :: WebViewClass self => Signal self (String -> String -> IO())
+hoveringOverLink =
+    Signal (connect_STRING_STRING__NONE "hovering-over-link")
+
+-- | When a 'WebFrame' begins to load, this signal is emitted
+loadStarted :: WebViewClass self => Signal self (WebFrame -> IO())
+loadStarted = Signal (connect_OBJECT__NONE "load-started")
+
+-- | When a 'WebFrame' loaded the first data, this signal is emitted
+loadCommitted :: WebViewClass self => Signal self (WebFrame -> IO())
+loadCommitted = Signal (connect_OBJECT__NONE "load-committed")
+
+
+-- | When the global progress changed, this signal is emitted
+--
+-- the global progress will be passed back to user function
+progressChanged :: WebViewClass self => Signal self (Int-> IO())
+progressChanged = 
+    Signal (connect_INT__NONE "load-progress-changed")
+
+-- | When loading finished, this signal is emitted
+loadFinished :: WebViewClass self => Signal self (WebFrame -> IO())
+loadFinished = 
+    Signal (connect_OBJECT__NONE "load-finished")
+
+-- | When An error occurred while loading. 
+--
+-- By default, if the signal is not handled,
+-- the WebView will display a stock error page. 
+--
+-- You need to handle the signal
+-- if you want to provide your own error page.
+-- 
+-- The URI that triggered the error and the 'GError' will be passed back to user function.
+loadError :: WebViewClass self => Signal self (WebFrame -> String -> GError -> IO Bool)
+loadError = Signal (connect_OBJECT_STRING_BOXED__BOOL "load-error" peek)
+
+createWebView :: WebViewClass self => Signal self (WebFrame -> IO WebView)
+createWebView = Signal (connect_OBJECT__OBJECTPTR "create-web-view")
+
+-- | Emitted when closing a WebView is requested. 
+--
+-- This occurs when a call is made from JavaScript's window.close function. 
+-- The default signal handler does not do anything. 
+-- It is the owner's responsibility to hide or delete the 'WebView', if necessary.
+-- 
+-- User function should return True to stop the handlers from being invoked for the event 
+-- or False to propagate the event furter
+closeWebView :: WebViewClass self => Signal self (IO Bool)
+closeWebView = 
+    Signal (connect_NONE__BOOL "close-web-view")
+
+-- | A JavaScript console message was created.
+consoleMessage :: WebViewClass self => Signal self (String -> String -> Int -> String -> IO Bool)
+consoleMessage = Signal (connect_STRING_STRING_INT_STRING__BOOL "console-message")
+
+-- | The 'copyClipboard' signal is a keybinding signal which gets emitted to copy the selection to the clipboard.
+--
+-- The default bindings for this signal are Ctrl-c and Ctrl-Insert.
+copyClipboard :: WebViewClass self => Signal self (IO ())
+copyClipboard = Signal (connect_NONE__NONE "copy-clipboard")
+
+-- | The 'cutClipboard' signal is a keybinding signal which gets emitted to cut the selection to the clipboard.
+--
+-- The default bindings for this signal are Ctrl-x and Shift-Delete.
+cutClipboard :: WebViewClass self => Signal self (IO ())
+cutClipboard = Signal (connect_NONE__NONE "cut-clipboard")
+
+-- | The 'pasteClipboard' signal is a keybinding signal which gets emitted to paste the contents of the clipboard into the Web view.
+--
+-- The default bindings for this signal are Ctrl-v and Shift-Insert.
+pasteClipboard :: WebViewClass self => Signal self (IO ())
+pasteClipboard = Signal (connect_NONE__NONE "paste-clipboard")
+
+-- | When a context menu is about to be displayed this signal is emitted.
+populatePopup :: WebViewClass self => Signal self (Menu -> IO ())
+populatePopup = Signal (connect_OBJECT__NONE "populate-popup")
+
+-- | Emitted when printing is requested by the frame, usually because of a javascript call. 
+-- When handling this signal you should call 'webFramePrintFull' or 'webFramePrint' to do the actual printing.
+--
+-- The default handler will present a print dialog and carry a print operation. 
+-- Notice that this means that if you intend to ignore a print
+-- request you must connect to this signal, and return True.
+printRequested :: WebViewClass self => Signal self (WebFrame -> IO Bool)
+printRequested = Signal (connect_OBJECT__BOOL "print-requested")
+
+-- | A JavaScript alert dialog was created.
+scriptAlert :: WebViewClass self => Signal self (WebFrame -> String -> IO Bool)
+scriptAlert = Signal (connect_OBJECT_STRING__BOOL "scriptAlert")
+
+-- | A JavaScript confirm dialog was created, providing Yes and No buttons.
+scriptConfirm :: WebViewClass self => Signal self (WebFrame -> String -> IO Bool)
+scriptConfirm = Signal (connect_OBJECT_STRING__BOOL "script-confirm")
+
+-- | A JavaScript prompt dialog was created, providing an entry to input text.
+scriptPrompt :: WebViewClass self => Signal self (WebFrame -> String -> String -> IO Bool)
+scriptPrompt = Signal (connect_OBJECT_STRING_STRING__BOOL "script-prompt")
+
+-- | When status-bar text changed, this signal will emitted.
+statusBarTextChanged :: WebViewClass self => Signal self (String -> IO ())
+statusBarTextChanged = Signal (connect_STRING__NONE "status-bar-text-changed")
+
+
+
+-- | The 'selectAll' signal is a keybinding signal which gets emitted to select the complete contents of the text view.
+-- 
+-- The default bindings for this signal is Ctrl-a.
+selectAll :: WebViewClass self => Signal self (IO ())
+selectAll = Signal (connect_NONE__NONE "select-all")
+
+-- | When selection changed, this signal is emitted.
+selectionChanged :: WebViewClass self => Signal self (IO ())
+selectionChanged = Signal (connect_NONE__NONE "selection-changed")
+
+-- | When set scroll adjustments, this signal is emitted.
+setScrollAdjustments :: WebViewClass self => Signal self (Adjustment -> Adjustment -> IO ())
+setScrollAdjustments = Signal (connect_OBJECT_OBJECT__NONE "set-scroll-adjustments")
+
+-- | The 'databaseQuotaExceeded' signal will be emitted when a Web Database exceeds the quota of its security origin. 
+-- This signal may be used to increase the size of the quota before the originating operation fails.
+databaseQuotaExceeded :: WebViewClass self => Signal self (WebFrame -> WebDatabase -> IO ())
+databaseQuotaExceeded = Signal (connect_OBJECT_OBJECT__NONE "database-quota-exceeded")
+
+-- | When document loading finished, this signal is emitted
+documentLoadFinished :: WebViewClass self => Signal self (WebFrame -> IO ())
+documentLoadFinished = Signal (connect_OBJECT__NONE "document-load-finished")
+
+
+-- | Emitted after new 'WebView' instance had been created in 'onCreateWebView' user function
+-- when the new 'WebView' should be displayed to the user.
+-- 
+-- All the information about how the window should look, 
+-- including size,position,whether the location, status and scroll bars should be displayed, 
+-- is ready set.
+webViewReady:: WebViewClass self => Signal self (IO Bool)
+webViewReady =
+    Signal (connect_NONE__BOOL "web-view-ready")
+
+-- | Emitted after A new 'Download' is being requested. 
+--
+-- By default, if the signal is not handled, the download is cancelled.
+--  
+-- Notice that while handling this signal you must set the target URI using 'downloadSetDestinationUri'
+-- 
+-- If you intend to handle downloads yourself, return False in user function.
+downloadRequested :: WebViewClass self => Signal self (Download -> IO Bool)
+downloadRequested =
+    Signal (connect_OBJECT__BOOL "download-requested")
+
+-- | Emitted after Icon loaded
+iconLoaded :: WebViewClass self => Signal self (IO ())
+iconLoaded =
+    Signal (connect_NONE__NONE "icon-loaded")
+
+-- | The "redo" signal is a keybinding signal which gets emitted to redo the last editing command.
+--
+-- The default binding for this signal is Ctrl-Shift-z
+redo :: WebViewClass self => Signal self (IO ())
+redo =
+   Signal (connect_NONE__NONE "redo")
+
+-- | The "undo" signal is a keybinding signal which gets emitted to undo the last editing command.
+--
+-- The default binding for this signal is Ctrl-z
+undo :: WebViewClass self => Signal self (IO ())
+undo =
+   Signal (connect_NONE__NONE "undo")
+
+-- | Decide whether or not to display the given MIME type. 
+-- If this signal is not handled, the default behavior is to show the content of the
+-- requested URI if WebKit can show this MIME type and the content disposition is not a download; 
+-- if WebKit is not able to show the MIME type nothing happens.
+--
+-- Notice that if you return True, meaning that you handled the signal, 
+-- you are expected to be aware of the "Content-Disposition" header. 
+-- A value of "attachment" usually indicates a download regardless of the MIME type, 
+-- see also soupMessageHeadersGetContentDisposition'
+-- And you must call 'webPolicyDecisionIgnore', 'webPolicyDecisionDownload', or 'webPolicyDecisionUse' 
+-- on the 'webPolicyDecision' object.
+mimeTypePolicyDecisionRequested :: WebViewClass self => Signal self (WebFrame -> NetworkRequest -> String -> WebPolicyDecision -> IO Bool)
+mimeTypePolicyDecisionRequested = Signal (connect_OBJECT_OBJECT_STRING_OBJECT__BOOL "mime-type-policy-decision-requested")
+
+-- | The 'moveCursor' will be emitted to apply the cursor movement described by its parameters to the view.
+moveCursor :: WebViewClass self => Signal self (MovementStep -> Int -> IO Bool)
+moveCursor = Signal (connect_ENUM_INT__BOOL "move-cursor")
+
+-- | Emitted when frame requests a navigation to another page. 
+-- If this signal is not handled, the default behavior is to allow the navigation.
+--
+-- Notice that if you return True, meaning that you handled the signal, 
+-- you are expected to be aware of the "Content-Disposition" header. 
+-- A value of "attachment" usually indicates a download regardless of the MIME type, 
+-- see also soupMessageHeadersGetContentDisposition'
+-- And you must call 'webPolicyDecisionIgnore', 'webPolicyDecisionDownload', or 'webPolicyDecisionUse' 
+-- on the 'webPolicyDecision' object.
+navigationPolicyDecisionRequested :: WebViewClass self => Signal self (WebFrame -> NetworkRequest -> WebNavigationAction -> WebPolicyDecision -> IO Bool)
+navigationPolicyDecisionRequested = Signal (connect_OBJECT_OBJECT_OBJECT_OBJECT__BOOL "navigation-policy-decision-requested")
+
+-- | Emitted when frame requests opening a new window. 
+-- With this signal the browser can use the context of the request to decide about the new window. 
+-- If the request is not handled the default behavior is to allow opening the new window to load the URI, 
+-- which will cause a 'createWebView' signal emission where the browser handles the new window action 
+-- but without information of the context that caused the navigation. 
+-- The following 'navigationPolicyDecisionRequested' emissions will load the page 
+-- after the creation of the new window just with the information of this new navigation context, 
+-- without any information about the action that made this new window to be opened.
+--
+-- Notice that if you return True, meaning that you handled the signal, 
+-- you are expected to be aware of the "Content-Disposition" header. 
+-- A value of "attachment" usually indicates a download regardless of the MIME type, 
+-- see also soupMessageHeadersGetContentDisposition'
+-- And you must call 'webPolicyDecisionIgnore', 'webPolicyDecisionDownload', or 'webPolicyDecisionUse' 
+-- on the 'webPolicyDecision' object.
+newWindowPolicyDecisionRequested :: WebViewClass self => Signal self (WebFrame -> NetworkRequest -> WebNavigationAction -> WebPolicyDecision -> IO Bool)
+newWindowPolicyDecisionRequested = Signal (connect_OBJECT_OBJECT_OBJECT_OBJECT__BOOL "new-window-policy-decision-requested")
+
+-- | Emitted when a request is about to be sent. 
+-- You can modify the request while handling this signal. 
+-- You can set the URI in the 'NetworkRequest' object itself, 
+-- and add/remove/replace headers using the SoupMessage object it carries, 
+-- if it is present. See 'networkRequestGetMessage'. 
+-- Setting the request URI to "about:blank" will effectively cause the request to load nothing, 
+-- and can be used to disable the loading of specific resources.
+--
+-- Notice that information about an eventual redirect is available in response's SoupMessage, 
+-- not in the SoupMessage carried by the request.
+-- If response is NULL, then this is not a redirected request.
+--
+-- The 'WebResource' object will be the same throughout all the lifetime of the resource, 
+-- but the contents may change from inbetween signal emissions.
+resourceRequestStarting :: WebViewClass self => Signal self (WebFrame -> WebResource -> NetworkRequest -> NetworkResponse -> IO ())
+resourceRequestStarting = Signal (connect_OBJECT_OBJECT_OBJECT_OBJECT__NONE "resource-request-starting")
diff --git a/Graphics/UI/Gtk/WebKit/WebWindowFeatures.chs b/Graphics/UI/Gtk/WebKit/WebWindowFeatures.chs
new file mode 100644
--- /dev/null
+++ b/Graphics/UI/Gtk/WebKit/WebWindowFeatures.chs
@@ -0,0 +1,121 @@
+{-# LANGUAGE CPP #-}
+-- -*-haskell-*-
+-----------------------------------------------------------------------------
+--  Module      :  Graphics.UI.Gtk.WebKit.WebWindowFeatures
+--  Author      :  Andy Stewart
+--  Copyright   :  (c) 2010 Andy Stewart <lazycat.manatee@gmail.com>
+--
+--  This library is free software; you can redistribute it and/or
+--  modify it under the terms of the GNU Lesser General Public
+--  License as published by the Free Software Foundation; either
+--  version 2.1 of the License, or (at your option) any later version.
+--
+--  This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY; without even the implied warranty of
+--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+--  Lesser General Public License for more details.
+--
+-- |
+-- Maintainer  : gtk2hs-users@lists.sourceforge.net
+-- Stability   : provisional
+-- Portability : portable (depends on GHC)
+--
+-- Access to the WebKit Web WindowFeatures
+-----------------------------------------------------------------------------
+
+module Graphics.UI.Gtk.WebKit.WebWindowFeatures (
+-- * Types
+  WebWindowFeatures,
+
+-- * Constructors
+  webWindowFeaturesNew,
+
+-- * Methods  
+  webWindowFeaturesEqual,
+
+-- * Attributes
+  webWindowFeaturesFullscreen,
+  webWindowFeaturesHeight,
+  webWindowFeaturesWidth,
+  webWindowFeaturesX,
+  webWindowFeaturesY,
+  webWindowFeaturesLocationbarVisible,
+  webWindowFeaturesMenubarVisible,
+  webWindowFeaturesScrollbarVisible,
+  webWindowFeaturesStatusbarVisible,
+  webWindowFeaturesToolbarVisible,
+) where
+
+import Control.Monad		(liftM)
+
+import System.Glib.FFI
+import System.Glib.UTFString
+import System.Glib.GList
+import System.Glib.GError 
+import System.Glib.Attributes
+import System.Glib.Properties
+import Graphics.UI.Gtk.Gdk.Events
+
+{#import Graphics.UI.Gtk.Abstract.Object#}	(makeNewObject)
+{#import Graphics.UI.Gtk.WebKit.Types#}
+{#import System.Glib.GObject#}
+
+{#context lib="webkit" prefix ="webkit"#}
+
+-- * Constructors
+
+-- | Creates a new 'WebWindowFeatures' instance with default values. 
+-- It must be manually attached to a WebView.
+webWindowFeaturesNew :: IO WebWindowFeatures
+webWindowFeaturesNew = 
+    constructNewGObject mkWebWindowFeatures $ {#call web_window_features_new#}
+
+-- | Decides if a 'WebWindowFeatures' instance equals another, as in has the same values.
+webWindowFeaturesEqual :: 
+   (WebWindowFeaturesClass winA, WebWindowFeaturesClass winB) => winA -> winB
+ -> IO Bool
+webWindowFeaturesEqual winA winB =
+    liftM toBool $ {#call web_window_features_equal#} (toWebWindowFeatures winA) (toWebWindowFeatures winB)
+
+-- * Attributes
+
+-- | Controls whether window will be displayed fullscreen.
+webWindowFeaturesFullscreen :: WebWindowFeaturesClass self => Attr self Bool
+webWindowFeaturesFullscreen = newAttrFromBoolProperty "fullscreen"
+
+-- | The height of the window on the screen.
+webWindowFeaturesHeight :: WebWindowFeaturesClass self => Attr self Int
+webWindowFeaturesHeight = newAttrFromIntProperty "height"
+
+-- | The width of the window on the screen.
+webWindowFeaturesWidth :: WebWindowFeaturesClass self => Attr self Int
+webWindowFeaturesWidth = newAttrFromIntProperty "width"
+
+-- | Controls whether the locationbar should be visible for the window.
+webWindowFeaturesLocationbarVisible :: WebWindowFeaturesClass self => Attr self Bool
+webWindowFeaturesLocationbarVisible = newAttrFromBoolProperty "locationbar-visible"
+
+-- | Controls whether the menubar should be visible for the window.
+webWindowFeaturesMenubarVisible :: WebWindowFeaturesClass self => Attr self Bool
+webWindowFeaturesMenubarVisible = newAttrFromBoolProperty "menubar-visible"
+
+-- | Controls whether the scrollbar should be visible for the window.
+webWindowFeaturesScrollbarVisible :: WebWindowFeaturesClass self => Attr self Bool
+webWindowFeaturesScrollbarVisible = newAttrFromBoolProperty "scrollbar-visible"
+
+-- | Controls whether the statusbar should be visible for the window.
+webWindowFeaturesStatusbarVisible :: WebWindowFeaturesClass self => Attr self Bool
+webWindowFeaturesStatusbarVisible = newAttrFromBoolProperty "statusbar-visible"
+
+-- | Controls whether the toolbar should be visible for the window.
+webWindowFeaturesToolbarVisible :: WebWindowFeaturesClass self => Attr self Bool
+webWindowFeaturesToolbarVisible = newAttrFromBoolProperty "toolbar-visible"
+
+-- | The starting x position of the window on the screen.
+webWindowFeaturesX :: WebWindowFeaturesClass self => Attr self Int
+webWindowFeaturesX = newAttrFromIntProperty "x"
+
+-- | The starting y position of the window on the screen.
+webWindowFeaturesY :: WebWindowFeaturesClass self => Attr self Int
+webWindowFeaturesY = newAttrFromIntProperty "y"
+
diff --git a/Gtk2HsSetup.hs b/Gtk2HsSetup.hs
new file mode 100644
--- /dev/null
+++ b/Gtk2HsSetup.hs
@@ -0,0 +1,486 @@
+{-# LANGUAGE CPP #-}
+
+#define CABAL_VERSION_ENCODE(major, minor, micro) (     \
+          ((major) * 10000)                             \
+        + ((minor) *   100)                             \
+        + ((micro) *     1))
+
+#define CABAL_VERSION_CHECK(major,minor,micro)    \
+        (CABAL_VERSION >= CABAL_VERSION_ENCODE(major,minor,micro))
+
+-- now, this is bad, but Cabal doesn't seem to actually pass any information about
+-- its version to CPP, so guess the version depending on the version of GHC
+#ifdef CABAL_VERSION_MINOR
+#ifndef CABAL_VERSION_MAJOR
+#define CABAL_VERSION_MAJOR 1
+#endif
+#ifndef CABAL_VERSION_MICRO
+#define CABAL_VERSION_MICRO 0
+#endif
+#define CABAL_VERSION CABAL_VERSION_ENCODE(     \
+        CABAL_VERSION_MAJOR,                    \
+        CABAL_VERSION_MINOR,                    \
+        CABAL_VERSION_MICRO)
+#else
+#warning Setup.hs is guessing the version of Cabal. If compilation of Setup.hs fails use -DCABAL_VERSION_MINOR=x for Cabal version 1.x.0 when building (prefixed by --ghc-option= when using the 'cabal' command)
+#if (__GLASGOW_HASKELL__ >= 612)
+#define CABAL_VERSION CABAL_VERSION_ENCODE(1,8,0)
+#else
+#define CABAL_VERSION CABAL_VERSION_ENCODE(1,6,0)
+#endif
+#endif
+
+-- | Build a Gtk2hs package.
+--
+module Gtk2HsSetup ( gtk2hsUserHooks, getPkgConfigPackages ) where
+
+import Distribution.Simple
+import Distribution.Simple.PreProcess
+import Distribution.InstalledPackageInfo ( importDirs,
+                                           showInstalledPackageInfo,
+                                           libraryDirs,
+                                           extraLibraries,
+                                           extraGHCiLibraries )
+import Distribution.Simple.PackageIndex (
+#if CABAL_VERSION_CHECK(1,8,0)
+  lookupInstalledPackageId
+#else
+  lookupPackageId
+#endif
+  )
+import Distribution.PackageDescription as PD ( PackageDescription(..),
+                                               updatePackageDescription,
+                                               BuildInfo(..),
+                                               emptyBuildInfo, allBuildInfo,
+                                               Library(..),
+                                               libModules, hasLibs)
+import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..),
+                                           InstallDirs(..),
+#if CABAL_VERSION_CHECK(1,8,0)
+                                           componentPackageDeps,
+#else
+                                           packageDeps,
+#endif
+                                           absoluteInstallDirs)
+import Distribution.Simple.Compiler  ( Compiler(..) )
+import Distribution.Simple.Program (
+  Program(..), ConfiguredProgram(..),
+  rawSystemProgramConf, rawSystemProgramStdoutConf,
+  c2hsProgram, pkgConfigProgram, requireProgram, ghcPkgProgram,
+  simpleProgram, lookupProgram, rawSystemProgramStdout, ProgArg)
+import Distribution.ModuleName ( ModuleName, components, toFilePath )
+import Distribution.Simple.Utils
+import Distribution.Simple.Setup (CopyFlags(..), InstallFlags(..), CopyDest(..),
+                                  defaultCopyFlags, ConfigFlags(configVerbosity),
+                                  fromFlag, toFlag, RegisterFlags(..), flagToMaybe,
+                                  fromFlagOrDefault, defaultRegisterFlags)
+import Distribution.Simple.BuildPaths ( autogenModulesDir )
+import Distribution.Simple.Install ( install )
+#if CABAL_VERSION_CHECK(1,8,0)
+import Distribution.Simple.Register ( generateRegistrationInfo, registerPackage )
+#else
+import qualified Distribution.Simple.Register as Register ( register )
+#endif
+import Distribution.Text ( simpleParse, display )
+import System.FilePath
+import System.Directory ( doesFileExist )
+import Distribution.Version (Version(..))
+import Distribution.Verbosity
+import Control.Monad (when, unless, filterM)
+import Data.Maybe ( isJust, isNothing, fromMaybe, maybeToList )
+import Data.List (isPrefixOf, isSuffixOf, nub)
+import Data.Char (isAlpha)
+import qualified Data.Map as M
+import qualified Data.Set as S
+
+import Control.Applicative ((<$>))
+import System.Directory (getDirectoryContents, doesDirectoryExist)
+
+-- the name of the c2hs pre-compiled header file
+precompFile = "precompchs.bin"
+
+gtk2hsUserHooks = simpleUserHooks {
+    hookedPrograms = [typeGenProgram, signalGenProgram, c2hsLocal],
+    hookedPreProcessors = [("chs", ourC2hs)],
+    confHook = \pd cf ->
+      confHook simpleUserHooks pd cf >>= return . adjustLocalBuildInfo,
+    postConf = \args cf pd lbi -> do
+      genSynthezisedFiles (fromFlag (configVerbosity cf)) pd lbi
+      postConf simpleUserHooks args cf pd lbi,
+    buildHook = \pd lbi uh bf -> fixDeps pd >>= \pd ->
+                                 (buildHook simpleUserHooks) pd lbi uh bf,
+    copyHook = \pd lbi uh flags -> (copyHook simpleUserHooks) pd lbi uh flags >>
+      installCHI pd lbi (fromFlag (copyVerbosity flags)) (fromFlag (copyDest flags)),
+    instHook = \pd lbi uh flags ->
+#if defined(mingw32_HOST_OS) || defined(__MINGW32__)
+      installHook pd lbi uh flags >>
+      installCHI pd lbi (fromFlag (installVerbosity flags)) NoCopyDest,
+    regHook = registerHook
+#else
+      instHook simpleUserHooks pd lbi uh flags >>
+      installCHI pd lbi (fromFlag (installVerbosity flags)) NoCopyDest
+#endif
+  }
+
+------------------------------------------------------------------------------
+-- Lots of stuff for windows ghci support
+------------------------------------------------------------------------------
+
+getDlls :: [FilePath] -> IO [FilePath]
+getDlls dirs = filter ((== ".dll") . takeExtension) . concat <$>
+    mapM getDirectoryContents dirs
+
+fixLibs :: [FilePath] -> [String] -> [String]
+fixLibs dlls = concatMap $ \ lib ->
+    case filter (("lib" ++ lib) `isPrefixOf`) dlls of
+                dll:_ -> [dropExtension dll]
+                _     -> if lib == "z" then [] else [lib]
+
+-- The following code is a big copy-and-paste job from the sources of
+-- Cabal 1.8 just to be able to fix a field in the package file. Yuck.
+
+#if CABAL_VERSION_CHECK(1,8,0)
+        
+installHook :: PackageDescription -> LocalBuildInfo
+                   -> UserHooks -> InstallFlags -> IO ()
+installHook pkg_descr localbuildinfo _ flags = do
+  let copyFlags = defaultCopyFlags {
+                      copyDistPref   = installDistPref flags,
+                      copyDest       = toFlag NoCopyDest,
+                      copyVerbosity  = installVerbosity flags
+                  }
+  install pkg_descr localbuildinfo copyFlags
+  let registerFlags = defaultRegisterFlags {
+                          regDistPref  = installDistPref flags,
+                          regInPlace   = installInPlace flags,
+                          regPackageDB = installPackageDB flags,
+                          regVerbosity = installVerbosity flags
+                      }
+  when (hasLibs pkg_descr) $ register pkg_descr localbuildinfo registerFlags
+
+registerHook :: PackageDescription -> LocalBuildInfo
+        -> UserHooks -> RegisterFlags -> IO ()
+registerHook pkg_descr localbuildinfo _ flags =
+    if hasLibs pkg_descr
+    then register pkg_descr localbuildinfo flags
+    else setupMessage verbosity
+           "Package contains no library to register:" (packageId pkg_descr)
+  where verbosity = fromFlag (regVerbosity flags)
+
+register :: PackageDescription -> LocalBuildInfo
+         -> RegisterFlags -- ^Install in the user's database?; verbose
+         -> IO ()
+register pkg@PackageDescription { library       = Just lib  }
+         lbi@LocalBuildInfo     { libraryConfig = Just clbi } regFlags
+  = do
+
+    installedPkgInfoRaw <- generateRegistrationInfo
+                           verbosity pkg lib lbi clbi inplace distPref
+
+    dllsInScope <- getSearchPath >>= (filterM doesDirectoryExist) >>= getDlls
+    let libs = fixLibs dllsInScope (extraLibraries installedPkgInfoRaw)
+        installedPkgInfo = installedPkgInfoRaw {
+                                extraGHCiLibraries = libs }
+
+     -- Three different modes:
+    case () of
+     _ | modeGenerateRegFile   -> die "Generate Reg File not supported"
+       | modeGenerateRegScript -> die "Generate Reg Script not supported"
+       | otherwise             -> registerPackage verbosity
+                                    installedPkgInfo pkg lbi inplace packageDb
+
+  where
+    modeGenerateRegFile = isJust (flagToMaybe (regGenPkgConf regFlags))
+    modeGenerateRegScript = fromFlag (regGenScript regFlags)
+    inplace   = fromFlag (regInPlace regFlags)
+    packageDb = case flagToMaybe (regPackageDB regFlags) of
+                    Just db -> db
+                    Nothing -> registrationPackageDB (withPackageDB lbi)
+    distPref  = fromFlag (regDistPref regFlags)
+    verbosity = fromFlag (regVerbosity regFlags)
+
+register _ _ regFlags = notice verbosity "No package to register"
+  where
+    verbosity = fromFlag (regVerbosity regFlags)
+
+#else
+installHook :: PackageDescription -> LocalBuildInfo
+                   -> UserHooks -> InstallFlags -> IO ()
+installHook pkg_descr localbuildinfo _ flags = do
+  let copyFlags = defaultCopyFlags {
+                      copyDistPref   = installDistPref flags,
+                      copyInPlace    = installInPlace flags,
+                      copyUseWrapper = installUseWrapper flags,
+                      copyDest       = toFlag NoCopyDest,
+                      copyVerbosity  = installVerbosity flags
+                  }
+  install pkg_descr localbuildinfo copyFlags
+  let registerFlags = defaultRegisterFlags {
+                          regDistPref  = installDistPref flags,
+                          regInPlace   = installInPlace flags,
+                          regPackageDB = installPackageDB flags,
+                          regVerbosity = installVerbosity flags
+                      }
+  when (hasLibs pkg_descr) $ register pkg_descr localbuildinfo registerFlags
+
+registerHook :: PackageDescription -> LocalBuildInfo
+        -> UserHooks -> RegisterFlags -> IO ()
+registerHook pkg_descr localbuildinfo _ flags =
+    if hasLibs pkg_descr
+    then register pkg_descr localbuildinfo flags
+    else setupMessage verbosity
+           "Package contains no library to register:" (packageId pkg_descr)
+  where verbosity = fromFlag (regVerbosity flags)
+
+register :: PackageDescription -> LocalBuildInfo
+         -> RegisterFlags -- ^Install in the user's database?; verbose
+         -> IO ()
+register pkg_descr lbi regFlags = do
+  let verbosity = fromFlag (regVerbosity regFlags)
+  warn verbosity "Cannot register ghci libraries with Cabal 1.6 (need 1.8)."
+  Register.register pkg_descr lbi regFlags
+  
+#endif
+
+------------------------------------------------------------------------------
+-- This is a hack for Cabal-1.8, It is not needed in Cabal-1.9.1 or later
+------------------------------------------------------------------------------
+
+adjustLocalBuildInfo :: LocalBuildInfo -> LocalBuildInfo
+adjustLocalBuildInfo lbi =
+  let extra = (Just libBi, [])
+      libBi = emptyBuildInfo { includeDirs = [ autogenModulesDir lbi
+                                             , buildDir lbi ] }
+   in lbi { localPkgDescr = updatePackageDescription extra (localPkgDescr lbi) }
+
+------------------------------------------------------------------------------
+-- Processing .chs files with our local c2hs.
+------------------------------------------------------------------------------
+
+ourC2hs :: BuildInfo -> LocalBuildInfo -> PreProcessor
+ourC2hs bi lbi = PreProcessor {
+  platformIndependent = False,
+  runPreProcessor = runC2HS bi lbi
+}
+
+runC2HS :: BuildInfo -> LocalBuildInfo ->
+           (FilePath, FilePath) -> (FilePath, FilePath) -> Verbosity -> IO ()
+runC2HS bi lbi (inDir, inFile)  (outDir, outFile) verbosity = do
+  -- have the header file name if we don't have the precompiled header yet
+  header <- case lookup "x-c2hs-header" (customFieldsBI bi) of
+    Just h -> return h
+    Nothing -> die ("Need x-c2hs-Header definition in the .cabal Library section "++
+                    "that sets the C header file to process .chs.pp files.")
+
+  -- c2hs will output files in out dir, removing any leading path of the input file.
+  -- Thus, append the dir of the input file to the output dir.
+  let (outFileDir, newOutFile) = splitFileName outFile
+  let newOutDir = outDir </> outFileDir
+  -- additional .chi files might be needed that other packages have installed;
+  -- we assume that these are installed in the same place as .hi files
+  let chiDirs = [ dir |
+#if CABAL_VERSION_CHECK(1,8,0)
+                  ipi <- maybe [] (map fst . componentPackageDeps) (libraryConfig lbi),
+                  dir <- maybe [] importDirs (lookupInstalledPackageId (installedPkgs lbi) ipi) ]
+#else
+                  ipi <- packageDeps lbi,
+                  dir <- maybe [] importDirs (lookupPackageId (installedPkgs lbi) ipi) ]
+#endif
+  rawSystemProgramConf verbosity c2hsLocal (withPrograms lbi) $
+       map ("--include=" ++) (outDir:chiDirs)
+    ++ ["--cppopts=" ++ opt | opt <- getCppOptions bi lbi]
+    ++ ["--output-dir=" ++ newOutDir,
+        "--output=" ++ newOutFile,
+        "--precomp=" ++ buildDir lbi </> precompFile,
+        header, inDir </> inFile]
+
+getCppOptions :: BuildInfo -> LocalBuildInfo -> [String]
+getCppOptions bi lbi
+    = nub $
+      ["-I" ++ dir | dir <- PD.includeDirs bi]
+   ++ [opt | opt@('-':c:_) <- (PD.cppOptions bi ++ PD.ccOptions bi), c `elem` "DIU"]
+
+installCHI :: PackageDescription -- ^information from the .cabal file
+        -> LocalBuildInfo -- ^information from the configure step
+        -> Verbosity -> CopyDest -- ^flags sent to copy or install
+        -> IO ()
+installCHI pkg@PD.PackageDescription { library = Just lib } lbi verbosity copydest = do
+  let InstallDirs { libdir = libPref } = absoluteInstallDirs pkg lbi copydest
+  -- cannot use the recommended 'findModuleFiles' since it fails if there exists
+  -- a modules that does not have a .chi file
+  mFiles <- mapM (findFileWithExtension' ["chi"] [buildDir lbi])
+                 (map toFilePath
+#if CABAL_VERSION_CHECK(1,8,0)
+                   (PD.libModules lib)
+#else
+                   (PD.libModules pkg)
+#endif
+                 )
+  let files = [ f | Just f <- mFiles ]
+#if CABAL_VERSION_CHECK(1,8,0)
+  installOrdinaryFiles verbosity libPref files
+#else
+  copyFiles verbosity libPref files
+#endif
+
+  
+installCHI _ _ _ _ = return ()
+
+------------------------------------------------------------------------------
+-- Generating the type hierarchy and signal callback .hs files.
+------------------------------------------------------------------------------
+
+typeGenProgram :: Program
+typeGenProgram = (simpleProgram "gtk2hsTypeGen")
+
+signalGenProgram :: Program
+signalGenProgram = (simpleProgram "gtk2hsHookGenerator")
+
+c2hsLocal :: Program
+c2hsLocal = (simpleProgram "gtk2hsC2hs")
+
+genSynthezisedFiles :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
+genSynthezisedFiles verb pd lbi = do
+
+  cPkgs <- getPkgConfigPackages verb lbi pd
+
+  let xList = maybe [] (customFieldsBI . libBuildInfo) (library pd)
+              ++customFieldsPD pd
+      typeOpts :: String -> [ProgArg]
+      typeOpts tag = concat [ map (\val -> '-':'-':drop (length tag) field++'=':val) (words content)
+                            | (field,content) <- xList,
+                              tag `isPrefixOf` field,
+                              field /= (tag++"file")]
+              ++ [ "--tag=" ++ tag
+                 | PackageIdentifier name (Version (major:minor:_) _) <- cPkgs
+                 , let name' = filter isAlpha (display name)
+                 , tag <- name'
+                        : [ name' ++ "-" ++ show major ++ "." ++ show digit
+                          | digit <- [0,2..minor] ]
+                 ]
+
+      signalsOpts :: [ProgArg]
+      signalsOpts = concat [ map (\val -> '-':'-':drop 10 field++'=':val) (words content)
+                        | (field,content) <- xList,
+                          "x-signals-" `isPrefixOf` field,
+                          field /= "x-signals-file"]
+
+      genFile :: Program -> [ProgArg] -> FilePath -> IO ()
+      genFile prog args outFile = do
+         res <- rawSystemProgramStdoutConf verb prog (withPrograms lbi) args
+         rewriteFile outFile res
+
+  (flip mapM_) (filter (\(tag,_) -> "x-types-" `isPrefixOf` tag && "file" `isSuffixOf` tag) xList) $
+    \(fileTag, f) -> do
+      let tag = reverse (drop 4 (reverse fileTag))
+      info verb ("Ensuring that class hierarchy in "++f++" is up-to-date.")
+      genFile typeGenProgram (typeOpts tag) f
+
+  case lookup "x-signals-file" xList of
+    Nothing -> return ()
+    Just f -> do
+      info verb ("Ensuring that callback hooks in "++f++" are up-to-date.")
+      genFile signalGenProgram signalsOpts f
+
+--FIXME: Cabal should tell us the selected pkg-config package versions in the
+--       LocalBuildInfo or equivalent.
+--       In the mean time, ask pkg-config again.
+
+getPkgConfigPackages :: Verbosity -> LocalBuildInfo -> PackageDescription -> IO [PackageId]
+getPkgConfigPackages verbosity lbi pkg =
+  sequence
+    [ do version <- pkgconfig ["--modversion", display pkgname]
+         case simpleParse version of
+           Nothing -> die $ "parsing output of pkg-config --modversion failed"
+           Just v  -> return (PackageIdentifier pkgname v)
+    | Dependency pkgname _ <- concatMap pkgconfigDepends (allBuildInfo pkg) ]
+  where
+    pkgconfig = rawSystemProgramStdoutConf verbosity
+                  pkgConfigProgram (withPrograms lbi)
+
+------------------------------------------------------------------------------
+-- Dependency calculation amongst .chs files.
+------------------------------------------------------------------------------
+
+-- Given all files of the package, find those that end in .chs and extract the
+-- .chs files they depend upon. Then return the PackageDescription with these
+-- files rearranged so that they are built in a sequence that files that are
+-- needed by other files are built first.
+fixDeps :: PackageDescription -> IO PackageDescription
+fixDeps pd@PD.PackageDescription {
+          PD.library = Just lib@PD.Library {
+            PD.exposedModules = expMods,
+            PD.libBuildInfo = bi@PD.BuildInfo {
+              PD.hsSourceDirs = srcDirs,
+              PD.otherModules = othMods
+            }}} = do
+  let findModule m = findFileWithExtension [".chs.pp",".chs"] srcDirs
+                       (joinPath (components m))
+  mExpFiles <- mapM findModule expMods
+  mOthFiles <- mapM findModule othMods
+
+  -- tag all exposed files with True so we throw an error if we need to build
+  -- an exposed module before an internal modules (we cannot express this)
+  let modDeps = zipWith (ModDep True []) expMods mExpFiles++
+                zipWith (ModDep False []) othMods mOthFiles
+  modDeps <- mapM extractDeps modDeps
+  let (expMods, othMods) = span mdExposed $ sortTopological modDeps
+      badOther = map (fromMaybe "<no file>" . mdLocation) $
+                 filter (not . mdExposed) expMods
+  unless (null badOther) $
+    die ("internal chs modules "++intercalate "," badOther++
+         " depend on exposed chs modules; cabal needs to build internal modules first")
+  return pd { PD.library = Just lib {
+    PD.exposedModules = map mdOriginal expMods,
+    PD.libBuildInfo = bi { PD.otherModules = map mdOriginal othMods }
+  }}
+
+data ModDep = ModDep {
+  mdExposed :: Bool,
+  mdRequires :: [ModuleName],
+  mdOriginal :: ModuleName,
+  mdLocation :: Maybe FilePath
+}
+
+instance Show ModDep where
+  show x = show (mdLocation x)
+
+instance Eq ModDep where
+  ModDep { mdOriginal = m1 } == ModDep { mdOriginal = m2 } = m1==m2
+instance Ord ModDep where
+  compare ModDep { mdOriginal = m1 } ModDep { mdOriginal = m2 } = compare m1 m2
+
+-- Extract the dependencies of this file. This is intentionally rather naive as it
+-- ignores CPP conditionals. We just require everything which means that the
+-- existance of a .chs module may not depend on some CPP condition.  
+extractDeps :: ModDep -> IO ModDep
+extractDeps md@ModDep { mdLocation = Nothing } = return md
+extractDeps md@ModDep { mdLocation = Just f } = withFileContents f $ \con -> do
+  let findImports acc (('{':'#':xs):xxs) = case (dropWhile ((==) ' ') xs) of
+        ('i':'m':'p':'o':'r':'t':' ':ys) ->
+          case simpleParse (takeWhile ((/=) '#') ys) of
+            Just m -> findImports (m:acc) xxs 
+            Nothing -> die ("cannot parse chs import in "++f++":\n"++
+                            "offending line is {#"++xs)
+         -- no more imports after the first non-import hook
+        _ -> return acc
+      findImports acc (_:xxs) = findImports acc xxs
+      findImports acc [] = return acc
+  mods <- findImports [] (lines con)
+  return md { mdRequires = mods }
+
+-- Find a total order of the set of modules that are partially sorted by their
+-- dependencies on each other. The function returns the sorted list of modules
+-- together with a list of modules that are required but not supplied by this
+-- in the input set of modules.
+sortTopological :: [ModDep] -> [ModDep]
+sortTopological ms = reverse $ fst $ foldl visit ([], S.empty) (map mdOriginal ms)
+  where
+  set = M.fromList (map (\m -> (mdOriginal m, m)) ms)
+  visit (out,visited) m
+    | m `S.member` visited = (out,visited)
+    | otherwise = case m `M.lookup` set of
+        Nothing -> (out, m `S.insert` visited)
+        Just md -> (md:out', visited')
+          where
+            (out',visited') = foldl visit (out, m `S.insert` visited) (mdRequires md)
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,7 @@
+-- Setup file for a Gtk2Hs module. Contains only adjustments specific to this module,
+-- all Gtk2Hs-specific boilerplate is stored in Gtk2HsSetup.hs which should be kept
+-- identical across all modules.
+import Gtk2HsSetup ( gtk2hsUserHooks )
+import Distribution.Simple ( defaultMainWithHooks )
+
+main = defaultMainWithHooks gtk2hsUserHooks
diff --git a/hswebkit.h b/hswebkit.h
new file mode 100644
--- /dev/null
+++ b/hswebkit.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2009 Cjacker Huang <jzhuang@redflag-linux.com>.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef HS_WEBKIT_H
+#define HS_WEBKIT_H
+/* to avoid stdbool.h error in JavaScriptCore/JSBase.h*/
+#define _Bool int
+
+/* include webkit headers*/
+#include <webkit/webkit.h>
+#endif
diff --git a/marshal.list b/marshal.list
new file mode 100644
--- /dev/null
+++ b/marshal.list
@@ -0,0 +1,64 @@
+# see glib-genmarshal(1) for a detailed description of the file format,
+# possible parameter types are:
+#   VOID        indicates   no   return   type,  or  no  extra
+#               parameters. if VOID is used as  the  parameter
+#               list, no additional parameters may be present.
+#   BOOLEAN     for boolean types (gboolean)
+#   CHAR        for signed char types (gchar)
+#   UCHAR       for unsigned char types (guchar)
+#   INT         for signed integer types (gint)
+#   UINT        for unsigned integer types (guint)
+#   LONG        for signed long integer types (glong)
+#   ULONG       for unsigned long integer types (gulong)
+#   ENUM        for enumeration types (gint)
+#   FLAGS       for flag enumeration types (guint)
+#   FLOAT       for single-precision float types (gfloat)
+#   DOUBLE      for double-precision float types (gdouble)
+#   STRING      for string types (gchar*)
+#   BOXED       for boxed (anonymous but reference counted) types (GBoxed*)
+#   POINTER     for anonymous pointer types (gpointer)
+#   NONE        deprecated alias for VOID
+#   BOOL        deprecated alias for BOOLEAN
+
+#
+# One discrepancy from Gtk+ is that for signals that may pass NULL for an object
+# reference, the Haskell signal should be passed a 'Maybe GObject'.
+# We therefore have two variants that are marshalled as a maybe type:
+#
+#   OBJECT      for GObject or derived types (GObject*)
+#   MOBJECT      for GObject or derived types (GObject*) that may be NULL
+
+# Furthermore, some objects needs to be destroyed synchronously from the main loop of
+# Gtk rather than during GC. These objects need to be marshalled using TOBJECT (for thread-safe
+# object). It doesn't hurt to use TOBJECT for an object that doesn't need it, except for the
+# some performance. As a rule of thumb, use TOBJECT for all libraries that build on package
+# 'gtk' and use OBJECT for all packages that only need packages 'glib', 'pango', 'cairo',
+# 'gio'. Again both variants exist. Note that the same names will be generated for OBJECT and
+# TOBJECT, so you have to remove the OBJECT handler if you need both.
+#
+#   TOBJECT      for GObject or derived types (GObject*)
+#   MTOBJECT      for GObject or derived types (GObject*) that may be NULL
+
+# If you add a new signal type, please check that it actually works!
+# If it is a Boxed type check that the reference counting is right.
+
+VOID:POINTER,POINTER
+BOOLEAN:TOBJECT
+BOOLEAN:TOBJECT,STRING,BOXED
+POINTER:TOBJECT
+BOOLEAN:INT,INT,STRING
+BOOLEAN:STRING,STRING,INT,STRING
+BOOLEAN:TOBJECT,STRING
+BOOLEAN:TOBJECT,STRING,STRING
+BOOLEAN:TOBJECT,TOBJECT,TOBJECT,TOBJECT
+BOOLEAN:TOBJECT,TOBJECT,STRING,TOBJECT
+NONE:TOBJECT,TOBJECT,TOBJECT,TOBJECT
+BOOLEAN:ENUM,INT
+BOOLEAN:NONE
+NONE:NONE
+NONE:TOBJECT,STRING
+NONE:TOBJECT,TOBJECT
+NONE:STRING,STRING
+NONE:TOBJECT
+NONE:INT
+NONE:STRING
diff --git a/webkit.cabal b/webkit.cabal
new file mode 100644
--- /dev/null
+++ b/webkit.cabal
@@ -0,0 +1,79 @@
+Name:           webkit
+Version:        0.11.0
+License:        GPL
+License-file:   COPYING
+Copyright:      (c) 2001-2010 The Gtk2Hs Team
+Author:         Cjacker Huang, Andy Stewart, Axel Simon
+Maintainer:     gtk2hs-users@sourceforge.net
+Build-Type:     Custom
+Cabal-Version:  >= 1.6.0
+Stability:      provisional
+homepage:       http://www.haskell.org/gtk2hs/
+bug-reports:    http://hackage.haskell.org/trac/gtk2hs/
+Synopsis:       Binding to the Webkit library.
+Description:    WebKit is a web content engine, derived from KHTML and KJS from KDE, and
+                used primarily in Apple's Safari browser.  It is made to be embedded in
+                other applications, such as mail readers, or web browsers.
+
+                It is able to display content such as HTML, SVG, XML, and others. It also
+                supports DOM, XMLHttpRequest, XSLT, CSS, Javascript/ECMAscript and more.
+
+Category:       Graphics
+Tested-With:    GHC == 6.12.1
+Extra-Source-Files: hswebkit.h
+                    Gtk2HsSetup.hs
+                    marshal.list
+					
+x-Types-File:       Graphics/UI/Gtk/WebKit/Types.chs
+x-Types-Tag:        webkit
+x-Types-ModName:    Graphics.UI.Gtk.WebKit.Types
+x-Types-Forward:    *Graphics.UI.GtkInternals
+x-Types-Destructor: objectUnrefFromMainloop
+
+Source-Repository head
+  type:         darcs
+  location:     http://code.haskell.org/gtk2hs/
+  subdir:       webkit
+
+Library
+        build-depends:  base >= 4 && < 5, array, containers, haskell98, mtl,
+                        glib  >= 0.11 && < 0.12, 
+                        pango >= 0.11 && < 0.12, 
+                        cairo >= 0.11 && < 0.12,
+                        gtk   >= 0.11 && < 0.12
+						
+        build-tools:    gtk2hsC2hs, gtk2hsHookGenerator, gtk2hsTypeGen
+		
+        exposed-modules:
+          Graphics.UI.Gtk.WebKit.Download
+          Graphics.UI.Gtk.WebKit.HitTestResult
+          Graphics.UI.Gtk.WebKit.NetworkRequest
+          Graphics.UI.Gtk.WebKit.NetworkResponse
+          Graphics.UI.Gtk.WebKit.SecurityOrigin
+          Graphics.UI.Gtk.WebKit.SoupAuthDialog
+          Graphics.UI.Gtk.WebKit.WebBackForwardList
+          Graphics.UI.Gtk.WebKit.WebDatabase
+          Graphics.UI.Gtk.WebKit.WebDataSource
+          Graphics.UI.Gtk.WebKit.WebFrame
+          Graphics.UI.Gtk.WebKit.WebHistoryItem
+          Graphics.UI.Gtk.WebKit.WebInspector
+          Graphics.UI.Gtk.WebKit.WebNavigationAction
+          Graphics.UI.Gtk.WebKit.WebPolicyDecision
+          Graphics.UI.Gtk.WebKit.WebResource
+          Graphics.UI.Gtk.WebKit.WebSettings
+          Graphics.UI.Gtk.WebKit.WebView
+          Graphics.UI.Gtk.WebKit.WebWindowFeatures
+        other-modules:
+          Graphics.UI.Gtk.WebKit.Internal
+          Graphics.UI.Gtk.WebKit.Types		  
+          Graphics.UI.Gtk.WebKit.Signals
+
+        extensions:     ForeignFunctionInterface
+		
+        x-Signals-File:  Graphics/UI/Gtk/WebKit/Signals.chs
+        x-Signals-Modname: Graphics.UI.Gtk.WebKit.Signals
+        x-Signals-Types: marshal.list
+        x-Signals-Import: Graphics.UI.GtkInternals
+		
+        x-c2hs-Header:  hswebkit.h
+        pkgconfig-depends: webkit-1.0 >= 1.1.15
