This directory contains the Chromium WebKit API.


OVERVIEW

  The Chromium WebKit API provides a stable interface to WebCore without
  revealing any of the WebCore or WTF types to the consumer.

  The 'public' directory contains the API headers, and the 'src' directory
  contains the API implementation.  The API is intended to be used either as a
  shared or static library.


COMPATIBILITY

  No attempt is made to support runtime compatibility in a shared library
  build.  Instead, the API is intended to support backwards compatibility at
  build time.  C++ symbols are allowed in other words.


DEFINES

  WEBKIT_IMPLEMENTATION is defined when building the 'src' directory.
  Consumers should not define this macro.

  WEBKIT_DLL is defined when building as a shared library.  This should be
  defined when building the 'src' directory, and it should also be defined by
  the consumer to ensure proper linkage to the shared library.

  WEBKIT_API is defined for platforms (e.g., Windows) that require additional
  annotations on functions and methods, which should be exported from WebKit
  when it is built as a DLL.  In general, this includes all public methods
  unless the methods are defined inline, marked pure virtual, or contained
  within a WEBKIT_IMPLEMENTATION section.  Also, any private method called by a
  public inline-defined method should be annotated with WEBKIT_API.  WEBKIT_API
  is not used to export whole classes.

  WEBKIT_USING_SKIA is defined when using Skia as the graphics library.

  WEBKIT_USING_CG is defined when using CG as the graphics library.

  WEBKIT_USING_V8 is defined when using V8 as the JavaScript library.

  WEBKIT_USING_JSC is defined when using JSC as the JavaScript library.


BASIC TYPES

  Use of STL is prohibited except in cases where it would be allowed in
  WebCore.  This includes non-allocating uses: algorithms, numeric limits, etc.
  WTF container classes should be used in the implementation of this API.

  The API includes some usage of WebCore types when WEBKIT_IMPLEMENTATION is
  defined.  This is only done for the convenience to the implementation, and
  should not be considered part of the Chromium WebKit API.  Similarly, STL
  types are assumed when WEBKIT_IMPLEMENTATION is not defined, which is done
  for the convenience of the consumer.
