<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Definitions SYSTEM "widlprocxml.dtd">
<Definitions>
  <Module name="Alarm" id="::Alarm">
    <webidl>module Alarm {
    typedef DOMString AlarmId;

    enum ByDayValue { &quot;MO&quot;, &quot;TU&quot;, &quot;WE&quot;, &quot;TH&quot;, &quot;FR&quot;, &quot;SA&quot;, &quot;SU&quot; };

    [NoInterfaceObject] interface AlarmManagerObject {
        readonly attribute <ref>AlarmManager</ref> alarm;
    };
    <ref>Tizen</ref> implements <ref>AlarmManagerObject</ref>;

    [NoInterfaceObject] interface AlarmManager {
        const long PERIOD_MINUTE = 60;

        const long PERIOD_HOUR = 3600;

        const long PERIOD_DAY = 86400;

        const long PERIOD_WEEK = 604800;

        void add(<ref>Alarm</ref> alarm, <ref>ApplicationId</ref> applicationId, optional <ref>ApplicationControl</ref>? appControl) raises(<ref>WebAPIException</ref>);

        void remove(<ref>AlarmId</ref> id) raises(<ref>WebAPIException</ref>);

        void removeAll() raises(<ref>WebAPIException</ref>);

        <ref>Alarm</ref> get(<ref>AlarmId</ref> id) raises(<ref>WebAPIException</ref>);

        <ref>Alarm</ref>[] getAll() raises(<ref>WebAPIException</ref>);
    };

    [NoInterfaceObject] interface Alarm {
        readonly attribute <ref>AlarmId</ref>? id;
    };

    [Constructor(long delay, optional long? period)]
    interface AlarmRelative : <ref>Alarm</ref> {
        readonly attribute long delay;

        readonly attribute long? period;

        long? getRemainingSeconds() raises(<ref>WebAPIException</ref>);
    };

    [Constructor(Date date),

     Constructor(Date date, <ref>ByDayValue</ref>[] daysOfTheWeek),

     Constructor(Date date, long period)]
    interface AlarmAbsolute : <ref>Alarm</ref> {
        readonly attribute Date date;

        readonly attribute long? period;

        readonly attribute <ref>ByDayValue</ref>[] daysOfTheWeek;

        Date? getNextScheduledDate() raises(<ref>WebAPIException</ref>);
    };
};</webidl>
    <descriptive>
        <brief>
 The Alarm API provides functionality for scheduling the system alarm.
It allows you to run other applications and have them perform operations at a specific time.
You can schedule an alarm to go off once or to repeat at specific intervals.
        </brief>
       <description>
        <p>
Each application has its own individual alarm storage, that is, applications cannot view or edit alarms set by other applications.
        </p>
        <p>
Once an alarm goes off, it will be removed from the alarm storage automatically.
<em>AlarmManager</em> provides methods to manage alarms such as adding and removing.
For more information on the Alarm features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/app_guide/alarm.htm">Alarm Guide</a>.
        </p>
       </description>
        <version>
 1.0
        </version>
    </descriptive>
    <Typedef name="AlarmId" id="::Alarm::AlarmId">
      <webidl>    typedef DOMString AlarmId;</webidl>
      <descriptive>
          <brief>
 An alarm identifier.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <Type type="DOMString"/>
    </Typedef>
    <Enum name="ByDayValue" id="::Alarm::ByDayValue">
      <webidl>    enum ByDayValue { &quot;MO&quot;, &quot;TU&quot;, &quot;WE&quot;, &quot;TH&quot;, &quot;FR&quot;, &quot;SA&quot;, &quot;SU&quot; };</webidl>
      <descriptive>
          <brief>
 Specifies the values for the <a href="#AlarmAbsolute::daysOfTheWeek">daysOfTheWeek</a> attribute.
          </brief>
         <description>
          <p>
&quot;MO&quot; to &quot;SU&quot; correspond to &quot;Monday&quot; to &quot;Sunday&quot;.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <EnumValue stringvalue="MO">
        <webidl> &quot;MO</webidl>
      </EnumValue>
      <EnumValue stringvalue="TU">
        <webidl> &quot;TU</webidl>
      </EnumValue>
      <EnumValue stringvalue="WE">
        <webidl> &quot;WE</webidl>
      </EnumValue>
      <EnumValue stringvalue="TH">
        <webidl> &quot;TH</webidl>
      </EnumValue>
      <EnumValue stringvalue="FR">
        <webidl> &quot;FR</webidl>
      </EnumValue>
      <EnumValue stringvalue="SA">
        <webidl> &quot;SA</webidl>
      </EnumValue>
      <EnumValue stringvalue="SU">
        <webidl> &quot;SU</webidl>
      </EnumValue>
    </Enum>
    <Interface name="AlarmManagerObject" id="::Alarm::AlarmManagerObject">
      <webidl>    [NoInterfaceObject] interface AlarmManagerObject {
        readonly attribute <ref>AlarmManager</ref> alarm;
    };</webidl>
      <descriptive>
          <brief>
 The AlarmManagerObject interface defines what is instantiated by the <em>Tizen </em>object from the Tizen Platform.
The <em>tizen.alarm </em>object allows access to the functionality of the Alarm API.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="alarm" id="::Alarm::AlarmManagerObject::alarm">
        <webidl>        readonly attribute <ref>AlarmManager</ref> alarm;</webidl>
        <Type name="AlarmManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="AlarmManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>AlarmManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="AlarmManager" id="::Alarm::AlarmManager">
      <webidl>    [NoInterfaceObject] interface AlarmManager {
        const long PERIOD_MINUTE = 60;

        const long PERIOD_HOUR = 3600;

        const long PERIOD_DAY = 86400;

        const long PERIOD_WEEK = 604800;

        void add(<ref>Alarm</ref> alarm, <ref>ApplicationId</ref> applicationId, optional <ref>ApplicationControl</ref>? appControl) raises(<ref>WebAPIException</ref>);

        void remove(<ref>AlarmId</ref> id) raises(<ref>WebAPIException</ref>);

        void removeAll() raises(<ref>WebAPIException</ref>);

        <ref>Alarm</ref> get(<ref>AlarmId</ref> id) raises(<ref>WebAPIException</ref>);

        <ref>Alarm</ref>[] getAll() raises(<ref>WebAPIException</ref>);
    };</webidl>
      <descriptive>
          <brief>
 The AlarmManager interface provides methods to manage alarms.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Const name="PERIOD_MINUTE" value="60" id="::Alarm::AlarmManager::PERIOD_MINUTE">
        <webidl>        const long PERIOD_MINUTE = 60;</webidl>
        <descriptive>
            <brief>
 The period of a minute.
It defines the number of seconds per minute.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long"/>
      </Const>
      <Const name="PERIOD_HOUR" value="3600" id="::Alarm::AlarmManager::PERIOD_HOUR">
        <webidl>        const long PERIOD_HOUR = 3600;</webidl>
        <descriptive>
            <brief>
 The period of an hour.
It defines the number of seconds per hour.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long"/>
      </Const>
      <Const name="PERIOD_DAY" value="86400" id="::Alarm::AlarmManager::PERIOD_DAY">
        <webidl>        const long PERIOD_DAY = 86400;</webidl>
        <descriptive>
            <brief>
 The period of a day.
It defines the number of seconds per day.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long"/>
      </Const>
      <Const name="PERIOD_WEEK" value="604800" id="::Alarm::AlarmManager::PERIOD_WEEK">
        <webidl>        const long PERIOD_WEEK = 604800;</webidl>
        <descriptive>
            <brief>
 The period of a week.
It defines the number of seconds in a week.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long"/>
      </Const>
      <Operation name="add" id="::Alarm::AlarmManager::add">
        <webidl>        void add(<ref>Alarm</ref> alarm, <ref>ApplicationId</ref> applicationId, optional <ref>ApplicationControl</ref>? appControl) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds an alarm to the storage.
            </brief>
           <description>
            <p>
Sets an alarm with the application ID to be run. You should definitely provide the application ID to run
and the <a href=" ../../org.tizen.mobile.web.appprogramming/html/guide/app_guide/application_service.htm">application control </a>information if it is necessary.
For more information about the application control, see <a href="application.html">The Application API</a>.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/alarm
            </privilege>
            <Code> // Triggers an alarm on a given date/time
 var alarm = new tizen.AlarmAbsolute(new Date(2014, 10, 4, 8, 0));
 var appControl = new tizen.ApplicationControl(&quot;http://tizen.org/appcontrol/operation/view&quot;);
 tizen.alarm.add(alarm, tizen.application.getCurrentApplication().appInfo.id, appControl);
 console.log(&quot;Alarm added with id: &quot; + alarm.id);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="alarm">
            <descriptive>
                <description><p>
 An alarm to add. It can be either <em>AlarmRelative </em> or <em>AlarmAbsolute</em>.
                </p></description>
            </descriptive>
            <Type name="Alarm"/>
          </Argument>
          <Argument name="applicationId">
            <descriptive>
                <description><p>
 The application ID to run when the alarm is triggered.
                </p></description>
            </descriptive>
            <Type name="ApplicationId"/>
          </Argument>
          <Argument optional="optional" name="appControl">
            <descriptive>
                <description><p>
 The data structure describing application control details.
                </p></description>
            </descriptive>
            <Type name="ApplicationControl" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any input parameter does not contain a valid value.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="remove" id="::Alarm::AlarmManager::remove">
        <webidl>        void remove(<ref>AlarmId</ref> id) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes an alarm from the storage.
            </brief>
           <description>
            <p>
If an alarm goes off, it will be removed from the storage automatically.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/alarm
            </privilege>
            <Code> var alarms = tizen.alarm.getAll();

 // Removes the first alarm
 if (alarms.length > 0) {
   try {
     tizen.alarm.remove(alarms[0].id);
     console.log(&quot;Successfully removed the first alarm.&quot;);
   } catch(error) {
     console.log(&quot;Failed to remove the first alarm.&quot;);
   }
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 The ID of the alarm to remove
                </p></description>
            </descriptive>
            <Type name="AlarmId"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if this alarm identifier cannot be found in the storage.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any input parameter does not contain a valid value.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if the method cannot be completed because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removeAll" id="::Alarm::AlarmManager::removeAll">
        <webidl>        void removeAll() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes all alarms added by an application.
            </brief>
           <description>
            <p>
Because each application has its own alarm storage, this method removes alarms only added by the calling application.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/alarm
            </privilege>
            <Code> tizen.alarm.removeAll();
 console.log(&quot;remove all registered alarms in the storage.&quot;);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if the method cannot be completed because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="get" id="::Alarm::AlarmManager::get">
        <webidl>        <ref>Alarm</ref> get(<ref>AlarmId</ref> id) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Returns an alarm as per the specified identifier.
            </brief>
            <version>
 1.0
            </version>
            <Code> // Sets an alarm
 var date = new Date();
 date.setHours(date.getHours()+1);
 var abs_alarm = new tizen.AlarmAbsolute(date);

 // Adds an alarm
 tizen.alarm.add(abs_alarm, tizen.application.getCurrentApplication().appInfo.id);

 // Gets an alarm
 var alarm = tizen.alarm.get(abs_alarm.id);
 console.log(&quot;The alarm will trigger at &quot; + alarm.getNextScheduledDate());
 </Code>
        </descriptive>
        <Type name="Alarm">
          <descriptive>
              <description><p>
 Alarm An alarm object with the specified ID.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 The alarm ID to retrieve.
                </p></description>
            </descriptive>
            <Type name="AlarmId"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if this alarm identifier cannot be found in the storage.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any input parameter does not contain a valid value.
                </p></description>
                <description><p>
 with error type UnknownError, if the method cannot be completed because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAll" id="::Alarm::AlarmManager::getAll">
        <webidl>        <ref>Alarm</ref>[] getAll() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Retrieves all alarms in an application storage.
            </brief>
           <description>
            <p>
Alarms that have already been triggered are removed automatically from the storage.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> var alarms = tizen.alarm.getAll();
 console.log(alarms.length + &quot; alarms present in the storage.&quot;);
 </Code>
        </descriptive>
        <Type type="array">
          <descriptive>
              <description><p>
 Alarm[] All Alarm objects.
              </p></description>
          </descriptive>
          <Type name="Alarm"/>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the method cannot be completed because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="Alarm" id="::Alarm::Alarm">
      <webidl>    [NoInterfaceObject] interface Alarm {
        readonly attribute <ref>AlarmId</ref>? id;
    };</webidl>
      <descriptive>
          <brief>
 The Alarm interface is an abstract interface for alarm types.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="id" id="::Alarm::Alarm::id">
        <webidl>        readonly attribute <ref>AlarmId</ref>? id;</webidl>
        <descriptive>
            <brief>
 The alarm identifier.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="AlarmId" nullable="nullable"/>
      </Attribute>
    </Interface>
    <Interface name="AlarmRelative" id="::Alarm::AlarmRelative">
      <webidl>    [Constructor(long delay, optional long? period)]
    interface AlarmRelative : <ref>Alarm</ref> {
        readonly attribute long delay;

        readonly attribute long? period;

        long? getRemainingSeconds() raises(<ref>WebAPIException</ref>);
    };</webidl>
      <descriptive>
          <brief>
 The AlarmRelative interface provides the relative alarm, which occurs at a fixed interval in future.
          </brief>
         <description>
          <p>
This alarm triggers after a duration mentioned in the <em>delay</em> attribute from the moment the alarm is added.
If a <em>period</em> is provided, the alarm keeps triggering for the given interval.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code> // Gets the current application ID.
 var appId = tizen.application.getCurrentApplication().appInfo.id;

 // Sets an alarm in 3 hours from now
 var alarm1 = new tizen.AlarmRelative(3 * tizen.alarm.PERIOD_HOUR);
 tizen.alarm.add(alarm1, appId);

 // Sets an alarm in one hour, recurring after every 2 minutes
 var alarm2 = new tizen.AlarmRelative(tizen.alarm.PERIOD_HOUR, 2 * tizen.alarm.PERIOD_MINUTE);
 tizen.alarm.add(alarm2, appId);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(long delay, optional long? period)</webidl>
          <ArgumentList>
            <Argument name="delay">
              <Type type="long"/>
            </Argument>
            <Argument optional="optional" name="period">
              <Type type="long" nullable="nullable"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="Alarm"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="delay" id="::Alarm::AlarmRelative::delay">
        <webidl>        readonly attribute long delay;</webidl>
        <descriptive>
            <brief>
 An attribute to store the difference in time (in seconds) between when an alarm is added and when it is triggered.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="period" id="::Alarm::AlarmRelative::period">
        <webidl>        readonly attribute long? period;</webidl>
        <descriptive>
            <brief>
 An attribute to store the duration in seconds between each trigger of an alarm.
By default, this attribute is set to <var>null</var>, indicating that this alarm does not repeat.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </Attribute>
      <Operation name="getRemainingSeconds" id="::Alarm::AlarmRelative::getRemainingSeconds">
        <webidl>        long? getRemainingSeconds() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Returns the duration in seconds before the next alarm is triggered.
            </brief>
           <description>
            <p>
If the alarm has expired, this method returns <var>null</var>.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> // Gets the current application ID.
 var appId = tizen.application.getCurrentApplication().appInfo.id;

 // Sets an alarm in 3 hours from now
 var alarm = new tizen.AlarmRelative(3 * tizen.alarm.PERIOD_HOUR);
 tizen.alarm.add(alarm, appId);

 var sec = alarm.getRemainingSeconds();
 console.log(&quot;remaining time is &quot; + sec);
 </Code>
        </descriptive>
        <Type type="long" nullable="nullable">
          <descriptive>
              <description><p>
 long The duration before the next alarm is triggered.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the method cannot be completed because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="AlarmAbsolute" id="::Alarm::AlarmAbsolute">
      <webidl>    [Constructor(Date date),

     Constructor(Date date, <ref>ByDayValue</ref>[] daysOfTheWeek),

     Constructor(Date date, long period)]
    interface AlarmAbsolute : <ref>Alarm</ref> {
        readonly attribute Date date;

        readonly attribute long? period;

        readonly attribute <ref>ByDayValue</ref>[] daysOfTheWeek;

        Date? getNextScheduledDate() raises(<ref>WebAPIException</ref>);
    };</webidl>
      <descriptive>
          <brief>
 The AlarmAbsolute interface provides an absolute alarm, which triggers at a specified absolute date.
          </brief>
         <description>
          <p>
If a <em>period</em> is provided, the alarm keeps triggering for the given interval. If the <em>daysOfTheWeek</em> array is not empty, the alarm triggers every week, for the given days, at the time defined by the <em>date</em> attribute.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code> // Gets the current application ID.
 var appId = tizen.application.getCurrentApplication().appInfo.id;

 // Sets an alarm on January 1st 2014 08:00
 var date = new Date(2014, 0, 1, 8, 0);
 var alarm1 = new tizen.AlarmAbsolute(date);
 tizen.alarm.add(alarm1, appId);

 // Sets an alarm on January 1st 2014 08:00, repeating every 2 days
 var alarm2 = new tizen.AlarmAbsolute(date, 2 * tizen.alarm.PERIOD_DAY);
 tizen.alarm.add(alarm2, appId);

 // Sets an alarm occurring on every Saturday and Sunday, at 08:00, starting from January 1st 2014
 var alarm3 = new tizen.AlarmAbsolute(date, [&quot;SA&quot;, &quot;SU&quot;]);
 tizen.alarm.add(alarm3, appId);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(Date date)</webidl>
          <ArgumentList>
            <Argument name="date">
              <Type type="Date"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
        <ExtendedAttribute name="Constructor">
          <webidl>     Constructor(Date date, <ref>ByDayValue</ref>[] daysOfTheWeek)</webidl>
          <ArgumentList>
            <Argument name="date">
              <Type type="Date"/>
            </Argument>
            <Argument name="daysOfTheWeek">
              <Type type="array">
                <Type name="ByDayValue"/>
              </Type>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
        <ExtendedAttribute name="Constructor">
          <webidl>     Constructor(Date date, long period)</webidl>
          <ArgumentList>
            <Argument name="date">
              <Type type="Date"/>
            </Argument>
            <Argument name="period">
              <Type type="long"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="Alarm"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="date" id="::Alarm::AlarmAbsolute::date">
        <webidl>        readonly attribute Date date;</webidl>
        <descriptive>
            <brief>
 An attribute to store the absolute date/time when the alarm is initially triggered.
            </brief>
           <description>
            <p>
This attribute is precise to the second. Milliseconds will be ignored.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="Date"/>
      </Attribute>
      <Attribute readonly="readonly" name="period" id="::Alarm::AlarmAbsolute::period">
        <webidl>        readonly attribute long? period;</webidl>
        <descriptive>
            <brief>
 An attribute to store the duration in seconds between each trigger of the alarm.
            </brief>
           <description>
            <p>
By default, this attribute is set to <var>null</var>, indicating that this alarm does not repeat.
The <em>period</em> and <em>daysOfTheWeek</em> attributes are mutually exclusive.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="daysOfTheWeek" id="::Alarm::AlarmAbsolute::daysOfTheWeek">
        <webidl>        readonly attribute <ref>ByDayValue</ref>[] daysOfTheWeek;</webidl>
        <descriptive>
            <brief>
 An attribute to store the days of the week associated with the recurrence rule.
            </brief>
           <description>
            <p>
By default, this attribute is set to an empty array.
The <em>period</em> and <em>daysOfTheWeek</em> attributes are mutually exclusive.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="array">
          <Type name="ByDayValue"/>
        </Type>
      </Attribute>
      <Operation name="getNextScheduledDate" id="::Alarm::AlarmAbsolute::getNextScheduledDate">
        <webidl>        Date? getNextScheduledDate() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Returns the date / time of the next alarm trigger.
            </brief>
           <description>
            <p>
If the alarm has expired, this method returns <var>null</var>. The returned date is precise to the second.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> // Gets the current application ID.
 var appId = tizen.application.getCurrentApplication().appInfo.id;

 // Sets an alarm on January 1st 2014 08:00
 var date = new Date(2014, 0, 1, 8, 0);
 var alarm1 = new tizen.AlarmAbsolute(date);
 tizen.alarm.add(alarm1, appId);

 var date = alarm1.getNextScheduledDate();
 console.log(&quot;next scheduled time is &quot; + date);
 </Code>
        </descriptive>
        <Type type="Date" nullable="nullable">
          <descriptive>
              <description><p>
 Date The date/time of the next alarm trigger.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the method cannot be completed because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
  </Module>
  <Module name="Application" id="::Application">
    <webidl>module Application {

  typedef DOMString ApplicationId;

  typedef DOMString ApplicationContextId;

  [NoInterfaceObject] interface ApplicationManagerObject {
    readonly attribute <ref>ApplicationManager</ref> application;
  };
  <ref>Tizen</ref> implements <ref>ApplicationManagerObject</ref>;

  [NoInterfaceObject] interface ApplicationManager {

    <ref>Application</ref> getCurrentApplication() raises(<ref>WebAPIException</ref>);

    void kill(<ref>ApplicationContextId</ref> contextId,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void launch(<ref>ApplicationId</ref> id,
                optional <ref>SuccessCallback</ref>? successCallback,
                optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void launchAppControl(<ref>ApplicationControl</ref> appControl,
                          optional <ref>ApplicationId</ref>? id,
                          optional <ref>SuccessCallback</ref>? successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback,
                          optional <ref>ApplicationControlDataArrayReplyCallback</ref>? replyCallback) raises(<ref>WebAPIException</ref>);

    void findAppControl(<ref>ApplicationControl</ref> appControl,
                        <ref>FindAppControlSuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void getAppsContext(<ref>ApplicationContextArraySuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    <ref>ApplicationContext</ref> getAppContext(optional <ref>ApplicationContextId</ref>? contextId) raises(<ref>WebAPIException</ref>);

    void getAppsInfo(<ref>ApplicationInformationArraySuccessCallback</ref> successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    <ref>ApplicationInformation</ref> getAppInfo(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);

    <ref>ApplicationCertificate</ref>[] getAppCerts(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);

    DOMString getAppSharedURI(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);

    <ref>ApplicationMetaData</ref>[] getAppMetaData(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);

    long addAppInfoEventListener(<ref>ApplicationInformationEventCallback</ref> eventCallback) raises(<ref>WebAPIException</ref>);

    void removeAppInfoEventListener(long watchId) raises(<ref>WebAPIException</ref>);

  };

  [NoInterfaceObject] interface Application {

    readonly attribute <ref>ApplicationInformation</ref> appInfo;

    readonly attribute <ref>ApplicationContextId</ref> contextId;

    void exit() raises(<ref>WebAPIException</ref>);

    void hide() raises(<ref>WebAPIException</ref>);

    <ref>RequestedApplicationControl</ref> getRequestedAppControl() raises(<ref>WebAPIException</ref>);
  };


  [NoInterfaceObject] interface ApplicationInformation {

    readonly attribute <ref>ApplicationId</ref> id;

    readonly attribute DOMString name;

    readonly attribute DOMString iconPath;

    readonly attribute DOMString version;

    readonly attribute boolean show;

    readonly attribute DOMString[] categories;

    readonly attribute Date installDate;

    readonly attribute long size raises(<ref>WebAPIException</ref>);

    readonly attribute <ref>PackageId</ref> packageId;
  };

  [NoInterfaceObject] interface ApplicationContext {

    readonly attribute <ref>ApplicationContextId</ref> id;

    readonly attribute <ref>ApplicationId</ref> appId;

  };

  [Constructor(DOMString key, DOMString[] value)]
  interface ApplicationControlData {

    attribute DOMString key;

    attribute DOMString[] value;

  };

  [Constructor(DOMString operation, optional DOMString? uri,
               optional DOMString? mime, optional DOMString? category,
               optional <ref>ApplicationControlData</ref>[]? data)]
  interface ApplicationControl {

    attribute DOMString operation;

    attribute DOMString? uri;

    attribute DOMString? mime;

    attribute DOMString? category;

    attribute <ref>ApplicationControlData</ref>[] data;

  };

  [NoInterfaceObject] interface RequestedApplicationControl {

    readonly attribute <ref>ApplicationControl</ref> appControl;

    readonly attribute <ref>ApplicationId</ref> callerAppId;

    void replyResult(optional <ref>ApplicationControlData</ref>[]? data) raises(<ref>WebAPIException</ref>);

    void replyFailure() raises(<ref>WebAPIException</ref>);

  };

  [NoInterfaceObject] interface ApplicationCertificate {

    readonly attribute DOMString type;

    readonly attribute DOMString value;

  };

  [NoInterfaceObject] interface ApplicationMetaData {

    readonly attribute DOMString key;

    readonly attribute DOMString value;

  };


  [Callback=FunctionOnly, NoInterfaceObject] interface ApplicationInformationArraySuccessCallback {
    void onsuccess(<ref>ApplicationInformation</ref>[] informationArray);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface FindAppControlSuccessCallback {
    void onsuccess(<ref>ApplicationInformation</ref>[] informationArray, <ref>ApplicationControl</ref> appControl);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface ApplicationContextArraySuccessCallback {
    void onsuccess(<ref>ApplicationContext</ref>[] contexts);
  };

  [Callback, NoInterfaceObject] interface ApplicationControlDataArrayReplyCallback {
    void onsuccess(optional <ref>ApplicationControlData</ref>[]? data);

    void onfailure();
  };

  [Callback, NoInterfaceObject] interface ApplicationInformationEventCallback {
    void oninstalled(<ref>ApplicationInformation</ref> info);

    void onupdated(<ref>ApplicationInformation</ref> info);

    void onuninstalled(<ref>ApplicationId</ref> id);
  };

};</webidl>
    <descriptive>
        <brief>
 This API provides a way to launch other applications and access
application management.
        </brief>
       <description>
        <p>
The <em>ApplicationManager</em> interface also provides methods to launch other applications
explicitly and implicitly through the <em>ApplicationControl</em> interface.
The <em>ApplicationControl</em> interface consists of an operation, URI, and MIME type
and also describes an action to be performed by other
applications and can carry the result from the subsequent application.
The <em>ApplicationManager</em> interface also provides methods to handle the application
lifecycle, to access the installed applications on the device, and to let
an application be notified of a change in the application list.
        </p>
        <p>
The <em>Application</em> interface defines the current application's information and
the basic operations for the current application such as exit or hide.
        </p>
        <p>
For more information on the Application features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/app_guide/application.htm">Application Guide</a>.
        </p>
       </description>
        <version>
 1.0
        </version>
    </descriptive>
    <Typedef name="ApplicationId" id="::Application::ApplicationId">
      <webidl>  typedef DOMString ApplicationId;</webidl>
      <descriptive>
          <brief>
 The unique ID for an installed application.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <Type type="DOMString"/>
    </Typedef>
    <Typedef name="ApplicationContextId" id="::Application::ApplicationContextId">
      <webidl>  typedef DOMString ApplicationContextId;</webidl>
      <descriptive>
          <brief>
 The unique ID for a running application.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <Type type="DOMString"/>
    </Typedef>
    <Interface name="ApplicationManagerObject" id="::Application::ApplicationManagerObject">
      <webidl>  [NoInterfaceObject] interface ApplicationManagerObject {
    readonly attribute <ref>ApplicationManager</ref> application;
  };</webidl>
      <descriptive>
          <brief>
 This interface defines what is instantiated by the <em>Tizen </em>object on the Tizen Platform.
          </brief>
         <description>
          <p>
The <em>tizen.application </em>object allows access to the Application API's functionality.
          </p>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="application" id="::Application::ApplicationManagerObject::application">
        <webidl>    readonly attribute <ref>ApplicationManager</ref> application;</webidl>
        <Type name="ApplicationManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="ApplicationManagerObject">
      <webidl>  <ref>Tizen</ref> implements <ref>ApplicationManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="ApplicationManager" id="::Application::ApplicationManager">
      <webidl>  [NoInterfaceObject] interface ApplicationManager {

    <ref>Application</ref> getCurrentApplication() raises(<ref>WebAPIException</ref>);

    void kill(<ref>ApplicationContextId</ref> contextId,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void launch(<ref>ApplicationId</ref> id,
                optional <ref>SuccessCallback</ref>? successCallback,
                optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void launchAppControl(<ref>ApplicationControl</ref> appControl,
                          optional <ref>ApplicationId</ref>? id,
                          optional <ref>SuccessCallback</ref>? successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback,
                          optional <ref>ApplicationControlDataArrayReplyCallback</ref>? replyCallback) raises(<ref>WebAPIException</ref>);

    void findAppControl(<ref>ApplicationControl</ref> appControl,
                        <ref>FindAppControlSuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void getAppsContext(<ref>ApplicationContextArraySuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    <ref>ApplicationContext</ref> getAppContext(optional <ref>ApplicationContextId</ref>? contextId) raises(<ref>WebAPIException</ref>);

    void getAppsInfo(<ref>ApplicationInformationArraySuccessCallback</ref> successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    <ref>ApplicationInformation</ref> getAppInfo(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);

    <ref>ApplicationCertificate</ref>[] getAppCerts(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);

    DOMString getAppSharedURI(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);

    <ref>ApplicationMetaData</ref>[] getAppMetaData(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);

    long addAppInfoEventListener(<ref>ApplicationInformationEventCallback</ref> eventCallback) raises(<ref>WebAPIException</ref>);

    void removeAppInfoEventListener(long watchId) raises(<ref>WebAPIException</ref>);

  };</webidl>
      <descriptive>
          <brief>
 The ApplicationManager interface provides methods to retrieve application information, launch, install application, etc.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="getCurrentApplication" id="::Application::ApplicationManager::getCurrentApplication">
        <webidl>    <ref>Application</ref> getCurrentApplication() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the <em>Application </em>object defining the current application.
            </brief>
            <version>
 2.0
            </version>
            <Code> var app = tizen.application.getCurrentApplication();
 console.log(&quot;Current application's app id is &quot; + app.appInfo.id);
 </Code>
        </descriptive>
        <Type name="Application">
          <descriptive>
              <description><p>
 Application The data structure that defines the current application.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the application cannot be retrieved because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="kill" id="::Application::ApplicationManager::kill">
        <webidl>    void kill(<ref>ApplicationContextId</ref> contextId,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Kills an application with the specified application context ID.
            </brief>
           <description>
            <p>
The <em>ErrorCallback</em> method is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError - If the context is not found with the specified context ID.              </li>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value
or if the specified context ID matches the context ID of the calling application.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <privilegelevel>
 partner
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/appmanager.kill
            </privilege>
            <Code> function onKillSuccess() {
     console.log(&quot;Application terminated successfully&quot;);
 }

 function onRunningAppsContext(contexts) {
    // let's assume that the application &quot;targetApp0.main&quot; has been installed.
    var targetId = &quot;targetApp0.main&quot;;

    for (var i = 0; i &#60; contexts.length; i++) {
        if (contexts[i].appId == targetId) {
            tizen.application.kill(contexts[i].id, onKillSuccess);
        }
    }
 }

 tizen.application.getAppsContext(onRunningAppsContext);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="contextId">
            <descriptive>
                <description><p>
 The identifier of the application to kill
                </p></description>
            </descriptive>
            <Type name="ApplicationContextId"/>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when an application is killed successfully
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="launch" id="::Application::ApplicationManager::launch">
        <webidl>    void launch(<ref>ApplicationId</ref> id,
                optional <ref>SuccessCallback</ref>? successCallback,
                optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Launches an application with the given application ID.
            </brief>
           <description>
            <p>
The <em>ErrorCallback</em> method is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError - If the application is not found with the specified ID.              </li>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/application.launch
            </privilege>
            <Code> function onsuccess() {
     console.log(&quot;The application has launched successfully&quot;);
 }

 // let's assume that application &quot;targetApp0.main&quot; has been installed
 tizen.application.launch(&quot;targetApp0.main&quot;, onsuccess);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 A unique string representing the application ID
                </p></description>
            </descriptive>
            <Type name="ApplicationId"/>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 The method to call when the invocation ends successfully
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to call when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="launchAppControl" id="::Application::ApplicationManager::launchAppControl">
        <webidl>    void launchAppControl(<ref>ApplicationControl</ref> appControl,
                          optional <ref>ApplicationId</ref>? id,
                          optional <ref>SuccessCallback</ref>? successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback,
                          optional <ref>ApplicationControlDataArrayReplyCallback</ref>? replyCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Launches an application with the specified application control.
            </brief>
           <description>
            <p>
An application can launch other applications with the application control,
and get back the results from the launched applications.
            </p>
            <p>
The application control consists of an operation, URI, and MIME type, and describes
the request to be performed by the newly launched application. The
application control is passed to the <em>launchAppControl()</em> method to launch an
application. The system tries to find the proper application
to perform the requested application control, then launches the selected application.
            </p>
            <p>
The application control request is passed to the newly launched application
and it can be accessed by the <em>getRequestedAppControl() </em>method. The passed
application control contains the reason the application has been launched and
information about what the application is doing. The launched application
can send a result to the caller application with the <em>replyResult() </em>method of the
<em>RequestedApplicationControl</em> interface.
            </p>
            <p>
The <em>ErrorCallback</em> method is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError - If the system cannot find the application that matches the specified application control.              </li>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
SecurityError - If the application does not have the privilege to call the specified application control operation.              </li>
              <li>
UnknownError: If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/application.launch
            </privilege>
            <Code> var appControl = new tizen.ApplicationControl(
     &quot;http://tizen.org/appcontrol/operation/pick&quot;,
     null,
     &quot;image/jpeg&quot;,
     null);

 var appControlReplyCallback = {
     // callee sent a reply
     onsuccess: function(data) {
         for (var i = 0; i &#60; data.length; i++) {
             if (data[i].key == &quot;http://tizen.org/appcontrol/data/selected&quot;) {
                 console.log('Selected image is ' + data[i].value[0]);
             }
         }
     },
     // callee returned failure
     onfailure: function() {
         console.log('The launch application control failed');
     }
 }

 tizen.application.launchAppControl(
     appControl,
     null,
     function() {console.log(&quot;launch application control succeed&quot;); },
     function(e) {console.log(&quot;launch application control failed. reason: &quot; + e.message); },
     appControlReplyCallback );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="appControl">
            <descriptive>
                <description><p>
 The data structure describing application control details
                </p></description>
            </descriptive>
            <Type name="ApplicationControl"/>
          </Argument>
          <Argument optional="optional" name="id">
            <descriptive>
                <description><p>
 An identifier of the application to be launched. If the ID is <var>null </var>or not specified, then the system tries to find the application to be launched for the requested application control
                </p></description>
            </descriptive>
            <Type name="ApplicationId" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 The method to call when the invocation ends successfully
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="replyCallback">
            <descriptive>
                <description><p>
 The method to invoke when the application gets back results from the launched application
                </p></description>
            </descriptive>
            <Type name="ApplicationControlDataArrayReplyCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="findAppControl" id="::Application::ApplicationManager::findAppControl">
        <webidl>    void findAppControl(<ref>ApplicationControl</ref> appControl,
                        <ref>FindAppControlSuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Finds which applications can be launched with the given application control.
            </brief>
           <description>
            <p>
An application can get a list of other applications that can be launched with the application control.
            </p>
            <p>
The <em>ErrorCallback</em> method is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <Code> var appControl = new tizen.ApplicationControl(
     &quot;http://tizen.org/appcontrol/operation/pick&quot;,
     null,
     &quot;image/jpeg&quot;,
     null);

 function successCB(appInfos, appControl)
 {
     // appControl is same object with the value passed as first parameter to findAppControl()
     var appControlReplyCallback = {
         // callee sent a reply
         onsuccess: function(data) {
             for (var i = 0; i &#60; data.length; i++) {
                 if (data[i].key == &quot;http://tizen.org/appcontrol/data/selected&quot;) {
                     console.log('Selected image is ' + data[i].value[0]);
                 }
             }
         },
         // callee returned failure
         onfailure: function() {
             console.log('The launch application control failed');
         }
     }

     var appId = appInfos[0].id; // select first app's id

     tizen.application.launchAppControl(
         appControl,
         appId,
         function() {console.log(&quot;launch application control succeed&quot;); },
        function(e) {console.log(&quot;launch application control failed. reason: &quot; + e.message); },
        appControlReplyCallback );
 }

 tizen.application.findAppControl(appControl, successCB);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="appControl">
            <descriptive>
                <description><p>
 A data structure describing application control details
                </p></description>
            </descriptive>
            <Type name="ApplicationControl"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to call that returns a list of application information
                </p></description>
            </descriptive>
            <Type name="FindAppControlSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to call when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAppsContext" id="::Application::ApplicationManager::getAppsContext">
        <webidl>    void getAppsContext(<ref>ApplicationContextArraySuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets a list of application contexts for applications that are currently running on a device.
The information contained for each application corresponds to the application state at the time when the list had been generated.
            </brief>
           <description>
            <p>
The <em>ErrorCallback</em> method is launched with this error type:
            </p>
            <ul>
              <li>
UnknownError - If an unknown error occurs.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <Code> function onRunningAppsContext(contexts) {
     for (var i = 0; i &#60; contexts.length; i++)
         console.log(&quot;ID : &quot; + contexts[i].id);
 }

 tizen.application.getAppsContext(onRunningAppsContext);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to call when the invocation ends successfully
                </p></description>
            </descriptive>
            <Type name="ApplicationContextArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to call when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAppContext" id="::Application::ApplicationManager::getAppContext">
        <webidl>    <ref>ApplicationContext</ref> getAppContext(optional <ref>ApplicationContextId</ref>? contextId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the application context for the specified application context ID.
If the ID is set to<var> null</var> or is not set at all, the method returns the application context of the current application.
The list of running applications and their application IDs is obtained with <em>getAppsContext()</em>.
            </brief>
            <version>
 2.0
            </version>
            <Code> var appContext = tizen.application.getAppContext(null);
 console.log(&quot;Application context retrieved for app &quot; + appContext.appId);
 </Code>
        </descriptive>
        <Type name="ApplicationContext">
          <descriptive>
              <description><p>
 ApplicationContext A data structure that lists running application details.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="contextId">
            <descriptive>
                <description><p>
 A string representing an application context ID<br/>If the ID is not provided, the application context of the calling application is returned.
                </p></description>
            </descriptive>
            <Type name="ApplicationContextId" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the application context is not found with the specified ID.
                </p></description>
                <description><p>
 with error type UnknownError, if the application context cannot be retrieved because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAppsInfo" id="::Application::ApplicationManager::getAppsInfo">
        <webidl>    void getAppsInfo(<ref>ApplicationInformationArraySuccessCallback</ref> successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the list of installed applications' information on a device.
The information contained on each application corresponds to the application state at the time when the list had been generated.
            </brief>
           <description>
            <p>
The <em>ErrorCallback</em> method is launched with this error type:
            </p>
            <ul>
              <li>
UnknownError - If an unknown error occurs.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <Code> function onListInstalledApps(applications) {
     for (var i = 0; i &#60; applications.length; i++)
         console.log(&quot;ID : &quot; + applications[i].id);
 }

 tizen.application.getAppsInfo(onListInstalledApps);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to call when the invocation ends successfully
                </p></description>
            </descriptive>
            <Type name="ApplicationInformationArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to call when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAppInfo" id="::Application::ApplicationManager::getAppInfo">
        <webidl>    <ref>ApplicationInformation</ref> getAppInfo(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets application information for a specified application ID.
            </brief>
           <description>
            <p>
If the ID is set to <var>null</var> or not set at all, it returns application information for the current application.
The list of installed applications and their application IDs is obtained with <em>getAppsInfo()</em>.
            </p>
           </description>
            <version>
 2.0
            </version>
            <Code> var appInfo = tizen.application.getAppInfo(null);
 console.log(&quot;Current application name : &quot; + appInfo.name);
 </Code>
        </descriptive>
        <Type name="ApplicationInformation">
          <descriptive>
              <description><p>
 ApplicationInformation The information of an application.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="id">
            <descriptive>
                <description><p>
 A string representing an application ID<br/>If the ID is not provided, the application information of the calling application is returned.
                </p></description>
            </descriptive>
            <Type name="ApplicationId" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the application is not found with the specified ID.
                </p></description>
                <description><p>
 with error type UnknownError, if the application cannot be retrieved because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAppCerts" id="::Application::ApplicationManager::getAppCerts">
        <webidl>    <ref>ApplicationCertificate</ref>[] getAppCerts(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets application certificates for a specified application ID.
            </brief>
           <description>
            <p>
If the ID is set to <var>null</var> or not set at all, it returns application certificates for the current application.
            </p>
            <p>
The certificate types are listed below:
            </p>
            <ul>
              <li>
 AUTHOR_ROOT - Author Root Certificate               </li>
              <li>
 AUTHOR_INTERMEDIATE - Author Intermediate Certificate               </li>
              <li>
 AUTHOR_SIGNER - Author Signer Certificate               </li>
              <li>
 DISTRIBUTOR_ROOT - Distributor Root Certificate               </li>
              <li>
 DISTRIBUTOR_INTERMEDIATE - Distributor Intermediate Certificate               </li>
              <li>
 DISTRIBUTOR_SIGNER - Distributor Signer Certificate               </li>
              <li>
 DISTRIBUTOR2_ROOT - Distributor2 Root Certificate               </li>
              <li>
 DISTRIBUTOR2_INTERMEDIATE - Distributor2 Intermediate Certificate               </li>
              <li>
 DISTRIBUTOR2_SIGNER - Distributor2 Signer Certificate               </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <privilegelevel>
 partner
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/appmanager.certificate
            </privilege>
            <Code> var appCerts = tizen.application.getAppCerts(null);

 for (var i = 0; i &#60; appCerts.length; i++) {
    console.log(&quot;#&quot; + i + &quot; type:&quot; + appCerts[i].type);
    console.log(&quot;#&quot; + i + &quot; value:&quot; + appCerts[i].value);
 }
 </Code>
        </descriptive>
        <Type type="array">
          <descriptive>
              <description><p>
 ApplicationCertificate[] Array of certificate information of a specified application
              </p></description>
          </descriptive>
          <Type name="ApplicationCertificate"/>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="id">
            <descriptive>
                <description><p>
 A string representing an application ID. If the ID is not provided, the application certificate of the calling application is returned.
                </p></description>
            </descriptive>
            <Type name="ApplicationId" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotFoundError, if the application is not found with the specified ID.
                </p></description>
                <description><p>
 with error type UnknownError, if the application cannot be retrieved because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAppSharedURI" id="::Application::ApplicationManager::getAppSharedURI">
        <webidl>    DOMString getAppSharedURI(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the URI of the read-only shared directory of an application for a specified application ID.
            </brief>
           <description>
            <p>
The shared directory is used to export data to other applications.
If the ID is set to <var>null</var> or not set at all, it returns the shared directory URI for the current application.
            </p>
           </description>
            <version>
 2.1
            </version>
            <Code> var sharedDir = tizen.application.getAppSharedURI(null);
 console.log(&quot;shared directory : &quot; + sharedDir);
 </Code>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The shared directory URI of an application
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="id">
            <descriptive>
                <description><p>
 A string representing an application ID. If the ID is not provided, the shared directory URI of the calling application is returned.
                </p></description>
            </descriptive>
            <Type name="ApplicationId" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the application is not found with the specified ID.
                </p></description>
                <description><p>
 with error type UnknownError, if the application cannot be retrieved because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAppMetaData" id="::Application::ApplicationManager::getAppMetaData">
        <webidl>    <ref>ApplicationMetaData</ref>[] getAppMetaData(optional <ref>ApplicationId</ref>? id) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the application meta data array for a specified application ID.
            </brief>
           <description>
            <p>
If the ID is set to <var>null</var> or not set at all, it returns the application meta data array for the current application.
            </p>
           </description>
            <version>
 2.2
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/application.info
            </privilege>
            <Code> var metaDataArray = tizen.application.getAppMetaData(null);
 console.log(&quot;size of metadata : &quot; + metaDataArray.length);

 </Code>
        </descriptive>
        <Type type="array">
          <descriptive>
              <description><p>
 ApplicationMetaData[] Array of meta data of a specified application. If there are no meta data for a specified application,
an empty array is returned
              </p></description>
          </descriptive>
          <Type name="ApplicationMetaData"/>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="id">
            <descriptive>
                <description><p>
 A string representing an application ID. If the ID is not provided, the application metadata array of the calling application is returned.
                </p></description>
            </descriptive>
            <Type name="ApplicationId" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotFoundError, if the application is not found with the specified ID.
                </p></description>
                <description><p>
 with error type UnknownError, if the application cannot be retrieved because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="addAppInfoEventListener" id="::Application::ApplicationManager::addAppInfoEventListener">
        <webidl>    long addAppInfoEventListener(<ref>ApplicationInformationEventCallback</ref> eventCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds a listener for receiving any notification for changes in the list of installed applications
on a device.
            </brief>
           <description>
            <p>
It installs a callback that is triggered every time a change occurs on
the list of installed applications on a device. This change may
occur due to a new installation, uninstallation, or update of an application.
            </p>
            <p>
When executed, the implementation must immediately return a listener
ID that identifies the listener. After returning the ID, the change
detection operation is started asynchronously.
            </p>
            <p>
The <em>ApplicationInformationEventCallback </em>must be invoked every time a new
application is installed, removed, or updated.
            </p>
            <p>
The change detection must continue until the <em>removeAppInfoEventListener()</em> method is called
with the corresponding listener identifier.
            </p>
           </description>
            <version>
 2.0
            </version>
            <Code> var appEventCallback = {
    oninstalled: function(appInfo) {
       console.log('The application ' + appInfo.name + ' is installed');
    },
    onupdated: function(appInfo) {
       console.log('The application ' + appInfo.name + ' is updated');
    },
    onuninstalled: function(appid) {
       console.log('The application ' + appid + ' is uninstalled');
    }
 };
 var watchId = tizen.application.addAppInfoEventListener(appEventCallback);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long ID of the listener that can be used to remove the listener later.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="eventCallback">
            <descriptive>
                <description><p>
 The method to call when a change on the installed applications is made
                </p></description>
            </descriptive>
            <Type name="ApplicationInformationEventCallback"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if it fails to add a listener because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removeAppInfoEventListener" id="::Application::ApplicationManager::removeAppInfoEventListener">
        <webidl>    void removeAppInfoEventListener(long watchId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes the listener to stop receiving notifications for changes on the list of installed
applications on a device.
            </brief>
            <version>
 2.0
            </version>
            <Code> tizen.application.removeAppInfoEventListener(watchId);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="watchId">
            <descriptive>
                <description><p>
 An ID that identifies the listener
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type NotFoundError, if the listener is not found with the specified ID.
                </p></description>
                <description><p>
 with error type UnknownError, if it fails to remove a listener because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="Application" id="::Application::Application">
      <webidl>  [NoInterfaceObject] interface Application {

    readonly attribute <ref>ApplicationInformation</ref> appInfo;

    readonly attribute <ref>ApplicationContextId</ref> contextId;

    void exit() raises(<ref>WebAPIException</ref>);

    void hide() raises(<ref>WebAPIException</ref>);

    <ref>RequestedApplicationControl</ref> getRequestedAppControl() raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 This interface defines the current application's information and
the basic operations (such as exit or hide) for the current application.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="appInfo" id="::Application::Application::appInfo">
        <webidl>    readonly attribute <ref>ApplicationInformation</ref> appInfo;</webidl>
        <descriptive>
            <brief>
 An attribute to store the application information for the current application.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="ApplicationInformation"/>
      </Attribute>
      <Attribute readonly="readonly" name="contextId" id="::Application::Application::contextId">
        <webidl>    readonly attribute <ref>ApplicationContextId</ref> contextId;</webidl>
        <descriptive>
            <brief>
 An attribute to store the ID of a running application.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="ApplicationContextId"/>
      </Attribute>
      <Operation name="exit" id="::Application::Application::exit">
        <webidl>    void exit() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Exits the current application.
            </brief>
            <version>
 2.0
            </version>
            <Code> var app = tizen.application.getCurrentApplication();

 app.exit();
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="hide" id="::Application::Application::hide">
        <webidl>    void hide() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Hides the current application.
            </brief>
            <version>
 2.0
            </version>
            <Code> var app = tizen.application.getCurrentApplication();

 app.hide();
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getRequestedAppControl" id="::Application::Application::getRequestedAppControl">
        <webidl>    <ref>RequestedApplicationControl</ref> getRequestedAppControl() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the requested application control passed to the current application.
            </brief>
           <description>
            <p>
Gets the requested application control that contains the application control
passed by the <em>launchAppControl()</em> method from the calling application.
The requested application control contains the reason the application
is launched and what it has to perform. For example, an application
might be launched to display an image on a page by another
application's request. In all of these cases, the application is
responsible for checking the contents of the application control and responding
appropriately when it is launched.
            </p>
           </description>
            <version>
 2.0
            </version>
            <Code> var reqAppControl = tizen.application.getCurrentApplication().getRequestedAppControl();

 if (reqAppControl) {
     console.log(&quot;Requester AppID : &quot; + reqAppControl.callerAppId);
 }
 </Code>
        </descriptive>
        <Type name="RequestedApplicationControl">
          <descriptive>
              <description><p>
 RequestedApplicationControl The details of a requested application control
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the application control cannot be retrieved because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="ApplicationInformation" id="::Application::ApplicationInformation">
      <webidl>  [NoInterfaceObject] interface ApplicationInformation {

    readonly attribute <ref>ApplicationId</ref> id;

    readonly attribute DOMString name;

    readonly attribute DOMString iconPath;

    readonly attribute DOMString version;

    readonly attribute boolean show;

    readonly attribute DOMString[] categories;

    readonly attribute Date installDate;

    readonly attribute long size raises(<ref>WebAPIException</ref>);

    readonly attribute <ref>PackageId</ref> packageId;
  };</webidl>
      <descriptive>
          <brief>
 This interface defines the general information available to an installed application.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="id" id="::Application::ApplicationInformation::id">
        <webidl>    readonly attribute <ref>ApplicationId</ref> id;</webidl>
        <descriptive>
            <brief>
 An attribute to store the identifier of an application for application management.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="ApplicationId"/>
      </Attribute>
      <Attribute readonly="readonly" name="name" id="::Application::ApplicationInformation::name">
        <webidl>    readonly attribute DOMString name;</webidl>
        <descriptive>
            <brief>
 An attribute to store the name of an application.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="iconPath" id="::Application::ApplicationInformation::iconPath">
        <webidl>    readonly attribute DOMString iconPath;</webidl>
        <descriptive>
            <brief>
 An attribute to store the icon path of an application.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="version" id="::Application::ApplicationInformation::version">
        <webidl>    readonly attribute DOMString version;</webidl>
        <descriptive>
            <brief>
 An attribute to store the version of an application.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="show" id="::Application::ApplicationInformation::show">
        <webidl>    readonly attribute boolean show;</webidl>
        <descriptive>
            <brief>
 An attribute that determines whether the application information should
be shown (such as in menus).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="categories" id="::Application::ApplicationInformation::categories">
        <webidl>    readonly attribute DOMString[] categories;</webidl>
        <descriptive>
            <brief>
 An array of attributes to store the categories that the app belongs to.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="installDate" id="::Application::ApplicationInformation::installDate">
        <webidl>    readonly attribute Date installDate;</webidl>
        <descriptive>
            <brief>
 An attribute to store the application install/update time.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="Date"/>
      </Attribute>
      <Attribute readonly="readonly" name="size" id="::Application::ApplicationInformation::size">
        <webidl>    readonly attribute long size raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 An attribute to store the application size (installed space).
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/application.info
            </privilege>
        </descriptive>
        <Type type="long"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="packageId" id="::Application::ApplicationInformation::packageId">
        <webidl>    readonly attribute <ref>PackageId</ref> packageId;</webidl>
        <descriptive>
            <brief>
 An attribute to store the package ID of an application.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type name="PackageId"/>
      </Attribute>
    </Interface>
    <Interface name="ApplicationContext" id="::Application::ApplicationContext">
      <webidl>  [NoInterfaceObject] interface ApplicationContext {

    readonly attribute <ref>ApplicationContextId</ref> id;

    readonly attribute <ref>ApplicationId</ref> appId;

  };</webidl>
      <descriptive>
          <brief>
 This interface defines the information available about a running
application.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="id" id="::Application::ApplicationContext::id">
        <webidl>    readonly attribute <ref>ApplicationContextId</ref> id;</webidl>
        <descriptive>
            <brief>
 An attribute to store the ID of a running application.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="ApplicationContextId"/>
      </Attribute>
      <Attribute readonly="readonly" name="appId" id="::Application::ApplicationContext::appId">
        <webidl>    readonly attribute <ref>ApplicationId</ref> appId;</webidl>
        <descriptive>
            <brief>
 An attribute to store the ID of an installed application.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="ApplicationId"/>
      </Attribute>
    </Interface>
    <Interface name="ApplicationControlData" id="::Application::ApplicationControlData">
      <webidl>  [Constructor(DOMString key, DOMString[] value)]
  interface ApplicationControlData {

    attribute DOMString key;

    attribute DOMString[] value;

  };</webidl>
      <descriptive>
          <brief>
 This interface defines a key/value pair used to pass data
between applications through the <em>ApplicationControl </em>interface.
          </brief>
          <version>
 2.0
          </version>
          <Code> var appControlData = new tizen.ApplicationControlData(&quot;image&quot;, [imagedata1]);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(DOMString key, DOMString[] value)</webidl>
          <ArgumentList>
            <Argument name="key">
              <Type type="DOMString"/>
            </Argument>
            <Argument name="value">
              <Type type="array">
                <Type type="DOMString"/>
              </Type>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute name="key" id="::Application::ApplicationControlData::key">
        <webidl>    attribute DOMString key;</webidl>
        <descriptive>
            <brief>
 An attribute to store the name of a key.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute name="value" id="::Application::ApplicationControlData::value">
        <webidl>    attribute DOMString[] value;</webidl>
        <descriptive>
            <brief>
 An attribute to store the value associated with a key.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
    </Interface>
    <Interface name="ApplicationControl" id="::Application::ApplicationControl">
      <webidl>  [Constructor(DOMString operation, optional DOMString? uri,
               optional DOMString? mime, optional DOMString? category,
               optional <ref>ApplicationControlData</ref>[]? data)]
  interface ApplicationControl {

    attribute DOMString operation;

    attribute DOMString? uri;

    attribute DOMString? mime;

    attribute DOMString? category;

    attribute <ref>ApplicationControlData</ref>[] data;

  };</webidl>
      <descriptive>
          <brief>
 This interface consists of an operation, URI, MIME type,
and data. It describes an action to be performed by other applications
and is passed to launch other applications.
If the system gets the application control request, it finds
the corresponding application to be launched with the delivered application control
and launches the selected application.
          </brief>
          <version>
 2.0
          </version>
          <Code> var appControl =
       new tizen.ApplicationControl(
                  &quot;http://tizen.org/appcontrol/operation/view&quot;,
                  null,
                  &quot;image/jpeg&quot;,
                  null,
                  [new tizen.ApplicationControlData(&quot;images&quot;,
                                                    [imagedata1, imagedata2])] );
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(DOMString operation, optional DOMString? uri,
               optional DOMString? mime, optional DOMString? category,
               optional <ref>ApplicationControlData</ref>[]? data)</webidl>
          <ArgumentList>
            <Argument name="operation">
              <Type type="DOMString"/>
            </Argument>
            <Argument optional="optional" name="uri">
              <Type type="DOMString" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="mime">
              <Type type="DOMString" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="category">
              <Type type="DOMString" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="data">
              <Type type="array" nullable="nullable">
                <Type name="ApplicationControlData"/>
              </Type>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute name="operation" id="::Application::ApplicationControl::operation">
        <webidl>    attribute DOMString operation;</webidl>
        <descriptive>
            <brief>
 An attribute to store the string that defines the action to be
performed by an application control.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute name="uri" id="::Application::ApplicationControl::uri">
        <webidl>    attribute DOMString? uri;</webidl>
        <descriptive>
            <brief>
 An attribute to store the URI needed by an application control.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="mime" id="::Application::ApplicationControl::mime">
        <webidl>    attribute DOMString? mime;</webidl>
        <descriptive>
            <brief>
 An attribute to store the MIME type of content.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="category" id="::Application::ApplicationControl::category">
        <webidl>    attribute DOMString? category;</webidl>
        <descriptive>
            <brief>
 An attribute to store the category of the application to be launched.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="data" id="::Application::ApplicationControl::data">
        <webidl>    attribute <ref>ApplicationControlData</ref>[] data;</webidl>
        <descriptive>
            <brief>
 An array of attributes to store the data needed for an application control.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array">
          <Type name="ApplicationControlData"/>
        </Type>
      </Attribute>
    </Interface>
    <Interface name="RequestedApplicationControl" id="::Application::RequestedApplicationControl">
      <webidl>  [NoInterfaceObject] interface RequestedApplicationControl {

    readonly attribute <ref>ApplicationControl</ref> appControl;

    readonly attribute <ref>ApplicationId</ref> callerAppId;

    void replyResult(optional <ref>ApplicationControlData</ref>[]? data) raises(<ref>WebAPIException</ref>);

    void replyFailure() raises(<ref>WebAPIException</ref>);

  };</webidl>
      <descriptive>
          <brief>
 This interface has an application control information requested and passed
from another application and is passed to launch other applications. The newly
launched application can get the requested application control through the <em>getRequestedAppControl()</em> method, and send the results
to the calling application through the <em>replyResult()</em> method after performing the
required action requested by the calling application.
          </brief>
          <version>
 2.0
          </version>
          <Code> var reqAppControl = tizen.application.getCurrentApplication().getRequestedAppControl();
 if (reqAppControl) {
     console.log(&quot;Requester AppID : &quot; + reqAppControl.callerAppId);

     var appControl = reqAppControl.appControl;
     if (appControl.operation == &quot;http://tizen.org/appcontrol/operation/pick&quot;) {
         var data = new tizen.ApplicationControlData(&quot;http://tizen.org/appcontrol/data/selected&quot;, [&quot;Image1.jpg&quot;]);
         reqAppControl.replyResult([data]);
     }
 }
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="appControl" id="::Application::RequestedApplicationControl::appControl">
        <webidl>    readonly attribute <ref>ApplicationControl</ref> appControl;</webidl>
        <descriptive>
            <brief>
 An attribute to store the application control object that describes the caller application's request.
It contains the information that the calling application passed to <em>launchAppControl</em>.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="ApplicationControl"/>
      </Attribute>
      <Attribute readonly="readonly" name="callerAppId" id="::Application::RequestedApplicationControl::callerAppId">
        <webidl>    readonly attribute <ref>ApplicationId</ref> callerAppId;</webidl>
        <descriptive>
            <brief>
 An attribute to store the caller application's ID.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type name="ApplicationId"/>
      </Attribute>
      <Operation name="replyResult" id="::Application::RequestedApplicationControl::replyResult">
        <webidl>    void replyResult(optional <ref>ApplicationControlData</ref>[]? data) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sends the results to the caller application.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument optional="optional" name="data">
            <descriptive>
                <description><p>
 An array of ApplicationControlData objects
                </p></description>
            </descriptive>
            <Type type="array" nullable="nullable">
              <Type name="ApplicationControlData"/>
            </Type>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type NotFoundError, if the caller app is not alive or there is no response from the caller app.
                </p></description>
                <description><p>
 with error type UnknownError, if the reply request fails because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="replyFailure" id="::Application::RequestedApplicationControl::replyFailure">
        <webidl>    void replyFailure() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Notifies the calling application that the application failed
to perform the requested action.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the caller app is not alive or there is no response from the caller app.
                </p></description>
                <description><p>
 with error type UnknownError, if the reply request fails because of an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="ApplicationCertificate" id="::Application::ApplicationCertificate">
      <webidl>  [NoInterfaceObject] interface ApplicationCertificate {

    readonly attribute DOMString type;

    readonly attribute DOMString value;

  };</webidl>
      <descriptive>
          <brief>
 This interface defines the certificate information of an installed application.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="type" id="::Application::ApplicationCertificate::type">
        <webidl>    readonly attribute DOMString type;</webidl>
        <descriptive>
            <brief>
 An attribute to store the type of the application certificate
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="value" id="::Application::ApplicationCertificate::value">
        <webidl>    readonly attribute DOMString value;</webidl>
        <descriptive>
            <brief>
 An attribute to store the value of the application certificate
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
    </Interface>
    <Interface name="ApplicationMetaData" id="::Application::ApplicationMetaData">
      <webidl>  [NoInterfaceObject] interface ApplicationMetaData {

    readonly attribute DOMString key;

    readonly attribute DOMString value;

  };</webidl>
      <descriptive>
          <brief>
 This interface defines the meta data of an installed application
          </brief>
          <version>
 2.2
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="key" id="::Application::ApplicationMetaData::key">
        <webidl>    readonly attribute DOMString key;</webidl>
        <descriptive>
            <brief>
 An attribute to store the key of the application meta data
            </brief>
            <version>
 2.2
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="value" id="::Application::ApplicationMetaData::value">
        <webidl>    readonly attribute DOMString value;</webidl>
        <descriptive>
            <brief>
 An attribute to store the value of the application meta data
            </brief>
            <version>
 2.2
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
    </Interface>
    <Interface name="ApplicationInformationArraySuccessCallback" id="::Application::ApplicationInformationArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface ApplicationInformationArraySuccessCallback {
    void onsuccess(<ref>ApplicationInformation</ref>[] informationArray);
  };</webidl>
      <descriptive>
          <brief>
 This callback interface specifies a success callback that is invoked when the installed application list is retrieved.
          </brief>
         <description>
          <p>
This callback interface specifies a success method with an array of
<em>ApplicationInformation </em>objects as an input parameter. It is used in <em>ApplicationManager.getAppsInfo()</em>.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Application::ApplicationInformationArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>ApplicationInformation</ref>[] informationArray);</webidl>
        <descriptive>
            <brief>
 Called when the asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="informationArray">
            <descriptive>
                <description><p>
 A list of installed applications
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="ApplicationInformation"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="FindAppControlSuccessCallback" id="::Application::FindAppControlSuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface FindAppControlSuccessCallback {
    void onsuccess(<ref>ApplicationInformation</ref>[] informationArray, <ref>ApplicationControl</ref> appControl);
  };</webidl>
      <descriptive>
          <brief>
 This callback interface specifies a success callback that is invoked when the system has finished searching applications that match a specific application control .
          </brief>
         <description>
          <p>
This callback interface specifies a success method with an array of
<em>ApplicationInformation </em>objects and application control as an input parameter.
It is used in <em>ApplicationManager.findAppControl()</em>.
          </p>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Application::FindAppControlSuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>ApplicationInformation</ref>[] informationArray, <ref>ApplicationControl</ref> appControl);</webidl>
        <descriptive>
            <brief>
 Called when the asynchronous call completes successfully.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="informationArray">
            <descriptive>
                <description><p>
 A list of installed applications
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="ApplicationInformation"/>
            </Type>
          </Argument>
          <Argument name="appControl">
            <descriptive>
                <description><p>
 The application control that is passed to <em>ApplicationManager.findAppControl()</em>                </p></description>
            </descriptive>
            <Type name="ApplicationControl"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ApplicationContextArraySuccessCallback" id="::Application::ApplicationContextArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface ApplicationContextArraySuccessCallback {
    void onsuccess(<ref>ApplicationContext</ref>[] contexts);
  };</webidl>
      <descriptive>
          <brief>
 This callback interface specifies a success callback that is invoked when the list of running applications is retrieved.
          </brief>
         <description>
          <p>
This callback interface specifies a success method with
an array of <em>ApplicationContext </em>objects as an input parameter. It is used in <em>ApplicationManager.getAppsContext()</em>.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Application::ApplicationContextArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>ApplicationContext</ref>[] contexts);</webidl>
        <descriptive>
            <brief>
 Called when <em>ApplicationManager.getAppsContext() </em>completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="contexts">
            <descriptive>
                <description><p>
 A list of running applications
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="ApplicationContext"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ApplicationControlDataArrayReplyCallback" id="::Application::ApplicationControlDataArrayReplyCallback">
      <webidl>  [Callback, NoInterfaceObject] interface ApplicationControlDataArrayReplyCallback {
    void onsuccess(optional <ref>ApplicationControlData</ref>[]? data);

    void onfailure();
  };</webidl>
      <descriptive>
          <brief>
 The ApplicationControlDataArrayReplyCallback callback specifies success callbacks that are invoked as a reply from the requested application control within the application control requester.
          </brief>
         <description>
          <p>
This callback interface specifies two methods:
          </p>
          <ul>
            <li>
 <em>onsuccess()</em> - Invoked if the callee application calls <em>RequestedApplicationControl.replyResult()</em>.            </li>
            <li>
 <em>onfailure()</em> - Invoked if the callee application calls <em>RequestedApplicationControl.replyFailure()</em>.            </li>
          </ul>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Application::ApplicationControlDataArrayReplyCallback::onsuccess">
        <webidl>    void onsuccess(optional <ref>ApplicationControlData</ref>[]? data);</webidl>
        <descriptive>
            <brief>
 Called when the callee application calls <em>RequestedApplicationControl.replyResult()</em>.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument optional="optional" name="data">
            <descriptive>
                <description><p>
 An array of <em>ApplicationControlData</em> objects
                </p></description>
            </descriptive>
            <Type type="array" nullable="nullable">
              <Type name="ApplicationControlData"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="onfailure" id="::Application::ApplicationControlDataArrayReplyCallback::onfailure">
        <webidl>    void onfailure();</webidl>
        <descriptive>
            <brief>
 Called when the callee application calls <em>RequestedApplicationControl.replyFailure()</em>.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
      </Operation>
    </Interface>
    <Interface name="ApplicationInformationEventCallback" id="::Application::ApplicationInformationEventCallback">
      <webidl>  [Callback, NoInterfaceObject] interface ApplicationInformationEventCallback {
    void oninstalled(<ref>ApplicationInformation</ref> info);

    void onupdated(<ref>ApplicationInformation</ref> info);

    void onuninstalled(<ref>ApplicationId</ref> id);
  };</webidl>
      <descriptive>
          <brief>
 The ApplicationInformationEventCallback specifies listener for subscribing for notifications of changes in the list of installed
applications on a device.
          </brief>
         <description>
          <p>
This callback interface specifies methods that are invoked when
an application is installed, updated, or uninstalled.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="oninstalled" id="::Application::ApplicationInformationEventCallback::oninstalled">
        <webidl>    void oninstalled(<ref>ApplicationInformation</ref> info);</webidl>
        <descriptive>
            <brief>
 Called when an application is installed.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="info">
            <descriptive>
                <description><p>
 The application information of the installed application
                </p></description>
            </descriptive>
            <Type name="ApplicationInformation"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="onupdated" id="::Application::ApplicationInformationEventCallback::onupdated">
        <webidl>    void onupdated(<ref>ApplicationInformation</ref> info);</webidl>
        <descriptive>
            <brief>
 Called when an application is updated.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="info">
            <descriptive>
                <description><p>
 The application information of the updated application
                </p></description>
            </descriptive>
            <Type name="ApplicationInformation"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="onuninstalled" id="::Application::ApplicationInformationEventCallback::onuninstalled">
        <webidl>    void onuninstalled(<ref>ApplicationId</ref> id);</webidl>
        <descriptive>
            <brief>
 Called when an application is uninstalled.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 The ID of the uninstalled application
                </p></description>
            </descriptive>
            <Type name="ApplicationId"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="Archive" id="::Archive">
    <webidl>module Archive {

    typedef (DOMString or <ref>File</ref>) FileReference;

    enum ArchiveCompressionLevel {&quot;STORE&quot;, &quot;FAST&quot;, &quot;NORMAL&quot;, &quot;BEST&quot;};

    [NoInterfaceObject] interface ArchiveManagerObject {
        readonly attribute <ref>ArchiveManager</ref> archive;
    };

    <ref>Tizen</ref> implements <ref>ArchiveManagerObject</ref>;

    dictionary ArchiveFileOptions {
        boolean overwrite;

    };

    dictionary ArchiveFileEntryOptions {
        DOMString destination;

        boolean stripSourceDirectory;

        <ref>ArchiveCompressionLevel</ref> compressionLevel;

    };

    [NoInterfaceObject] interface ArchiveManager {
        long open(<ref>FileReference</ref> file,
                  <ref>FileMode</ref> mode,
                  <ref>ArchiveFileSuccessCallback</ref> onsuccess,
                  optional <ref>ErrorCallback</ref>? onerror,
                  optional <ref>ArchiveFileOptions</ref>? options) raises(<ref>WebAPIException</ref>);

        void abort(long operationIdentifier) raises(<ref>WebAPIException</ref>);
    };

    interface ArchiveFile {
        readonly attribute <ref>FileMode</ref> mode;

        readonly attribute unsigned long long? decompressedSize;

        long add(<ref>FileReference</ref> sourceFile,
                 optional <ref>SuccessCallback</ref>? onsuccess,
                 optional <ref>ErrorCallback</ref>? onerror,
                 optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                 optional <ref>ArchiveFileEntryOptions</ref>? options) raises(<ref>WebAPIException</ref>);

        long extractAll(<ref>FileReference</ref> destinationDirectory,
                        optional <ref>SuccessCallback</ref>? onsuccess,
                        optional <ref>ErrorCallback</ref>? onerror,
                        optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                        optional boolean? overwrite) raises(<ref>WebAPIException</ref>);

        long getEntries(<ref>ArchiveFileEntryArraySuccessCallback</ref> onsuccess,
                        optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

        long getEntryByName(DOMString name,
                            <ref>ArchiveFileEntrySuccessCallback</ref> onsuccess,
                            optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

        void close() raises(<ref>WebAPIException</ref>);
    };

    interface ArchiveFileEntry {
        readonly attribute DOMString name;

        readonly attribute unsigned long long size;

        readonly attribute unsigned long long? compressedSize;

        readonly attribute Date modified;

        long extract(<ref>FileReference</ref> destinationDirectory,
                     optional <ref>SuccessCallback</ref>? onsuccess,
                     optional <ref>ErrorCallback</ref>? onerror,
                     optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                     optional boolean? stripName,
                     optional boolean? overwrite) raises(<ref>WebAPIException</ref>);

    };

    [Callback=FunctionOnly, NoInterfaceObject] interface ArchiveFileSuccessCallback {
        void onsuccess(<ref>ArchiveFile</ref> archive);
    };

    [Callback=FunctionOnly, NoInterfaceObject] interface ArchiveFileEntrySuccessCallback {
        void onsuccess(<ref>ArchiveFileEntry</ref> entry);
    };

    [Callback=FunctionOnly, NoInterfaceObject] interface ArchiveFileEntryArraySuccessCallback {
        void onsuccess(<ref>ArchiveFileEntry</ref>[] entries);
    };

    [Callback=FunctionOnly, NoInterfaceObject] interface ArchiveFileProgressCallback {
        void onprogress(long operationIdentifier, double value, DOMString filename);
    };
};</webidl>
    <descriptive>
        <brief>
 The Archive API provides functions to create and manage archive files.
You can extract files, add a file to an archive file, and so on.
        </brief>
       <description>
        <p>
For more information about how to use Archive API, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/io_guide/archive.htm">Archive Guide</a>.
        </p>
       </description>
        <version>
 2.3
        </version>
    </descriptive>
    <Typedef name="FileReference" id="::Archive::FileReference">
      <webidl>    typedef (DOMString or <ref>File</ref>) FileReference;</webidl>
      <descriptive>
          <brief>
 File reference for an archive file.
It can be either a <var>File</var> object or a virtual path.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <Type type="union">
        <Type type="DOMString"/>
        <Type name="File"/>
      </Type>
    </Typedef>
    <Enum name="ArchiveCompressionLevel" id="::Archive::ArchiveCompressionLevel">
      <webidl>    enum ArchiveCompressionLevel {&quot;STORE&quot;, &quot;FAST&quot;, &quot;NORMAL&quot;, &quot;BEST&quot;};</webidl>
      <descriptive>
          <brief>
 Enumeration for the compression level.
          </brief>
         <description>
          <ul>
            <li>
STORE - No compression. The file is stored unchanged.            </li>
            <li>
FAST - Choose the fastest compression method, compression savings will be less.            </li>
            <li>
NORMAL - Default compression level.            </li>
            <li>
BEST - Choose the best compression method, compression may be slow.            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="STORE">
        <webidl>&quot;STORE</webidl>
      </EnumValue>
      <EnumValue stringvalue="FAST">
        <webidl> &quot;FAST</webidl>
      </EnumValue>
      <EnumValue stringvalue="NORMAL">
        <webidl> &quot;NORMAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="BEST">
        <webidl> &quot;BEST</webidl>
      </EnumValue>
    </Enum>
    <Interface name="ArchiveManagerObject" id="::Archive::ArchiveManagerObject">
      <webidl>    [NoInterfaceObject] interface ArchiveManagerObject {
        readonly attribute <ref>ArchiveManager</ref> archive;
    };</webidl>
      <descriptive>
          <brief>
 The ArchiveManagerObject interface defines what is instantiated in the <em>Tizen</em> object.
          </brief>
         <description>
          <p>
The <em>tizen.archive</em> object allows access to the Archive API.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="archive" id="::Archive::ArchiveManagerObject::archive">
        <webidl>        readonly attribute <ref>ArchiveManager</ref> archive;</webidl>
        <Type name="ArchiveManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="ArchiveManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>ArchiveManagerObject</ref>;</webidl>
    </Implements>
    <Dictionary name="ArchiveFileOptions" id="::Archive::ArchiveFileOptions">
      <webidl>    dictionary ArchiveFileOptions {
        boolean overwrite;

    };</webidl>
      <descriptive>
          <brief>
 The ArchiveFileOptions dictionary represents the option to decide if an archive file can be overwritten when an archive file is opened.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <DictionaryMember name="overwrite" id="::Archive::ArchiveFileOptions::overwrite">
        <webidl>        boolean overwrite;</webidl>
        <descriptive>
            <brief>
 Indicates whether opening an archive file for writing can overwrite the contents of the existing file.
            </brief>
           <description>
            <ul>
              <li>
true - The archive file is overwritten if an archive file with a same name exists in the same location. The previous contents are lost.              </li>
              <li>
false - The archive file is not overwritten if an archive file with a same name exists in the same location.              </li>
            </ul>
            <p>
The default value is <var>false</var>            </p>
            <p>
See description of the <em>mode</em> argument of the <em>open()</em> method.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="boolean"/>
      </DictionaryMember>
    </Dictionary>
    <Dictionary name="ArchiveFileEntryOptions" id="::Archive::ArchiveFileEntryOptions">
      <webidl>    dictionary ArchiveFileEntryOptions {
        DOMString destination;

        boolean stripSourceDirectory;

        <ref>ArchiveCompressionLevel</ref> compressionLevel;

    };</webidl>
      <descriptive>
          <brief>
 The ArchiveFileEntryOptions dictionary controls behavior when adding a file to an archive.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <DictionaryMember name="destination" id="::Archive::ArchiveFileEntryOptions::destination">
        <webidl>        DOMString destination;</webidl>
        <descriptive>
            <brief>
 Path where <em>ArchiveFileEntry</em> should be stored in an archive file.
            </brief>
            <version>
 2.3
            </version>
            <remark>
 If destination is not set, then the root directory of archive will be used (equivalent to <var>destination = &quot;&quot;</var>).
            </remark>
        </descriptive>
        <Type type="DOMString"/>
      </DictionaryMember>
      <DictionaryMember name="stripSourceDirectory" id="::Archive::ArchiveFileEntryOptions::stripSourceDirectory">
        <webidl>        boolean stripSourceDirectory;</webidl>
        <descriptive>
            <brief>
 Controls whether leading directory information is stripped from the source file name before storing.
            </brief>
           <description>
            <p>
The virtual root is always removed.
To omit all the remaining directory names, set <em>stripSourceDirectory</em> to <var>true</var>.
            </p>
            <table>
              <tr>
                <th rowspan="2">
Source file name                </th>
                <th colspan="2">
Target file name when <em>destination</em> is &quot;mypackage&quot;                </th>
              </tr>
              <tr>
                <th>
stripSourceDirectory: <em>true</em>                </th>
                <th>
stripSourceDirectory: <em>false</em>                </th>
              </tr>
              <tr>
                <td>
documents/tizen/archive/example/test.js                </td>
                <td>
mypackage/test.js                </td>
                <td>
mypackage/tizen/archive/example/test.js                </td>
              </tr>
              <tr>
                <td>
wgt-private/test/js/main.js                </td>
                <td>
mypackage/main.js                </td>
                <td>
mypackage/test/js/main.js                </td>
              </tr>
              <tr>
                <td>
downloads/test.c                </td>
                <td>
mypackage/test.c                </td>
                <td>
mypackage/test.c                </td>
              </tr>
            </table>
           </description>
            <version>
 2.3
            </version>
            <remark>
 The default value is <var>false</var>.
            </remark>
        </descriptive>
        <Type type="boolean"/>
      </DictionaryMember>
      <DictionaryMember name="compressionLevel" id="::Archive::ArchiveFileEntryOptions::compressionLevel">
        <webidl>        <ref>ArchiveCompressionLevel</ref> compressionLevel;</webidl>
        <descriptive>
            <brief>
 Compression level.
            </brief>
            <version>
 2.3
            </version>
            <remark>
 The default compression level is <var>NORMAL</var>.
            </remark>
        </descriptive>
        <Type name="ArchiveCompressionLevel"/>
      </DictionaryMember>
    </Dictionary>
    <Interface name="ArchiveManager" id="::Archive::ArchiveManager">
      <webidl>    [NoInterfaceObject] interface ArchiveManager {
        long open(<ref>FileReference</ref> file,
                  <ref>FileMode</ref> mode,
                  <ref>ArchiveFileSuccessCallback</ref> onsuccess,
                  optional <ref>ErrorCallback</ref>? onerror,
                  optional <ref>ArchiveFileOptions</ref>? options) raises(<ref>WebAPIException</ref>);

        void abort(long operationIdentifier) raises(<ref>WebAPIException</ref>);
    };</webidl>
      <descriptive>
          <brief>
 The ArchiveManager interface provides methods for global operations related to ArchiveFile.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="open" id="::Archive::ArchiveManager::open">
        <webidl>        long open(<ref>FileReference</ref> file,
                  <ref>FileMode</ref> mode,
                  <ref>ArchiveFileSuccessCallback</ref> onsuccess,
                  optional <ref>ErrorCallback</ref>? onerror,
                  optional <ref>ArchiveFileOptions</ref>? options) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Opens the archive file. After this operation, it is possible to add or get files to and from the archive.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError: If archiveFile format is not recognized              </li>
              <li>
NotFoundError: If the <em>mode</em> is &quot;r&quot; and the <em>file</em> does not exist, or the <em>mode</em> is not &quot;r&quot; and the <em>file</em> cannot be created because the path of the file after excluding its file name does not exist              </li>
              <li>
IOError: If the access is denied due to insufficient permissions              </li>
              <li>
UnknownError: In case of any other error              </li>
            </ul>
            <p>
Use <em>mode</em> depending on which operation are intended:
            </p>
            <table>
              <tr>
                <th>
Mode                </th>
                <th>
Description                </th>
              </tr>
              <tr>
                <td>
r                </td>
                <td>
Use this mode for extracting or getting information about the contents of an archive file. <br/><em>file</em> must exist. If the <em>file</em> does not exist, <em>onerror</em> will be invoked (<em>NotFoundError</em>).<br/>When an archive file is opened in this mode, <em>add()</em> will not be available. (<em>IOError</em> will be thrown.)                 </td>
              </tr>
              <tr>
                <td>
w                </td>
                <td>
Use this mode to create an archive file and add files to the archive file. <br/>If <em>file</em> does not exist, it will be created. <br/>If <em>file</em> exists and the <em>overwrite</em> option is <var>true</var>, the existing file will be overwritten with empty archive. <br/>If <em>file</em> exists and the <em>overwrite</em> option is <var>false</var>, <em>onerror</em> callback will be invoked (<em>InvalidModificationError</em>). <br/>When an archive file is opened in this mode, <em>getEntries()</em>, <em>getEntryByName()</em>, and <em>extractAll()</em> are not available. (<em>IOError</em> will be thrown.)
                </td>
              </tr>
              <tr>
                <td>
rw                </td>
                <td>
Use this mode for archive zipping/unzipping. <br/>If <em>file</em> does not exist, it will be created. <br/>If <em>file</em> exists and the <em>overwrite</em> option is <var>true</var>, the existing file will be overwritten with an empty archive. <br/>If <em>file</em> exists and the <em>overwrite</em> option is <var>false</var>, the existing contents are preserved.
Both adding and extracting will be available. <br/>                </td>
              </tr>
              <tr>
                <td>
a                </td>
                <td>
Use this mode to add new files to an archive file. <br/>If <em>file</em> does not exist, it will be created. <br/>If <em>file</em> exists, then the previous contents of the archive file are preserved and new files can be added to the archive file.
In this mode, <em>getEntries()</em>, <em>getEntryByName()</em>, and <em>extractAll()</em> are not available. (<em>IOError</em> will be thrown.)
                </td>
              </tr>
            </table>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> function successCallback(archive) {
     console.log(&quot;Success, can now read from archive &quot; + archive);
 }

 function errorCallback(error) {
     console.log(error);
 }

 tizen.archive.open(&quot;downloads/some_archive.zip&quot;, &quot;r&quot;, successCallback, errorCallback);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long Task ID which can be used to cancel the operation with abort()
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="file">
            <descriptive>
                <description><p>
 File to open
                </p></description>
            </descriptive>
            <Type name="FileReference"/>
          </Argument>
          <Argument name="mode">
            <descriptive>
                <description><p>
 File mode for the opened archive. Determines which operations are available
                </p></description>
            </descriptive>
            <Type name="FileMode"/>
          </Argument>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when archive is opened successfully
                </p></description>
            </descriptive>
            <Type name="ArchiveFileSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="options">
            <descriptive>
                <description><p>
 Additional options for initializing the ArchiveFile instance
                </p></description>
            </descriptive>
            <Type name="ArchiveFileOptions" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if parameter type does not match.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="abort" id="::Archive::ArchiveManager::abort">
        <webidl>        void abort(long operationIdentifier) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Cancels an operation with the given identifier.
            </brief>
            <version>
 2.3
            </version>
            <Code> function openSuccess(archive) {
     operationId = archive.extractAll(&quot;downloads/extracted&quot;);
     tizen.archive.abort(operationId);
 }

 tizen.archive.open(&quot;downloads/some_archive.zip&quot;, &quot;r&quot;, openSuccess);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="operationIdentifier">
            <descriptive>
                <description><p>
 Task ID returned by an asynchronous function from this module
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if any error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="ArchiveFile" id="::Archive::ArchiveFile">
      <webidl>    interface ArchiveFile {
        readonly attribute <ref>FileMode</ref> mode;

        readonly attribute unsigned long long? decompressedSize;

        long add(<ref>FileReference</ref> sourceFile,
                 optional <ref>SuccessCallback</ref>? onsuccess,
                 optional <ref>ErrorCallback</ref>? onerror,
                 optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                 optional <ref>ArchiveFileEntryOptions</ref>? options) raises(<ref>WebAPIException</ref>);

        long extractAll(<ref>FileReference</ref> destinationDirectory,
                        optional <ref>SuccessCallback</ref>? onsuccess,
                        optional <ref>ErrorCallback</ref>? onerror,
                        optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                        optional boolean? overwrite) raises(<ref>WebAPIException</ref>);

        long getEntries(<ref>ArchiveFileEntryArraySuccessCallback</ref> onsuccess,
                        optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

        long getEntryByName(DOMString name,
                            <ref>ArchiveFileEntrySuccessCallback</ref> onsuccess,
                            optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

        void close() raises(<ref>WebAPIException</ref>);
    };</webidl>
      <descriptive>
          <brief>
 The ArchiveFile interface provides access to member files of the archive file.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <Attribute readonly="readonly" name="mode" id="::Archive::ArchiveFile::mode">
        <webidl>        readonly attribute <ref>FileMode</ref> mode;</webidl>
        <descriptive>
            <brief>
 attribute File mode when it is opened.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="FileMode"/>
      </Attribute>
      <Attribute readonly="readonly" name="decompressedSize" id="::Archive::ArchiveFile::decompressedSize">
        <webidl>        readonly attribute unsigned long long? decompressedSize;</webidl>
        <descriptive>
            <brief>
 Size of all the files included in the archive after decompression.
            </brief>
           <description>
            <p>
The size is <var>null</var> until the archive is opened.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="unsigned long long" nullable="nullable"/>
      </Attribute>
      <Operation name="add" id="::Archive::ArchiveFile::add">
        <webidl>        long add(<ref>FileReference</ref> sourceFile,
                 optional <ref>SuccessCallback</ref>? onsuccess,
                 optional <ref>ErrorCallback</ref>? onerror,
                 optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                 optional <ref>ArchiveFileEntryOptions</ref>? options) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds a new member file to <em>ArchiveFile</em>.
            </brief>
           <description>
            <p>
If <em>sourceFile</em> refers to a directory,
the directory and its content will be added to ArchiveFile.
            </p>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError: If the given <em>sourceFile</em> does not exist              </li>
              <li>
IOError: If archiveFile can not be written due the lack of access permission              </li>
              <li>
InvalidModificationError: If the operation results in a name conflict in the archive<br/>i.e. two entries in the archive with the same name (including directory names).              </li>
              <li>
UnknownError: In any case of any other error              </li>
            </ul>
            <p>
Name stored for new entries is constructed from <em>sourceFile</em> according to the
<a href="#ArchiveFileEntryOptions::stripSourceDirectory">stripSourceDirectory</a> and <a href="#ArchiveFileEntryOptions::destination">destination</a> options. Names are constructed as follows:
            </p>
            <table>
              <tr>
                <th>
source file                </th>
                <th>
destination                </th>
                <th>
stripSourceDirectory                </th>
                <th>
resulting entry name                </th>
              </tr>
              <tr>
                <td>
documents/subdir/second/justName.ext                </td>
                <td>
<em>(empty)</em>                </td>
                <td>
<var>false</var>                </td>
                <td>
subdir/second/justName.ext                </td>
              </tr>
              <tr>
                <td>
documents/subdir/second/justName.ext                </td>
                <td>
<em>(empty)</em>                </td>
                <td>
<var>true</var>                </td>
                <td>
justName.ext                </td>
              </tr>
              <tr>
                <td>
documents/subdir/justName.ext                </td>
                <td>
&quot;report3&quot;                </td>
                <td>
<var>false</var>                </td>
                <td>
report3/subdir/justName.ext                </td>
              </tr>
              <tr>
                <td>
documents/subdir/justName.ext                </td>
                <td>
&quot;report3&quot;                </td>
                <td>
<var>true</var>                </td>
                <td>
report3/justName.ext                </td>
              </tr>
            </table>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> function errorCallback(error) {
     console.log(error);
 }

 function successCallback() {
     console.log(&quot;done&quot;);
 }

 function progressCallback(opId, val, name) {
     console.log(&quot;opId: &quot; + opId + &quot; with progress val: &quot; + val);
 }

 function createSuccess(archive) {
     archive.add(&quot;downloads/file.txt&quot;, successCallback, errorCallback, progressCallback);
 }

 tizen.archive.open(&quot;downloads/new_archive.zip&quot;, &quot;w&quot;, createSuccess);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long Task ID which can be used to cancel the operation with abort()
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="sourceFile">
            <descriptive>
                <description><p>
 File or directory to be added to archive
                </p></description>
            </descriptive>
            <Type name="FileReference"/>
          </Argument>
          <Argument optional="optional" name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when this operation is completed successfully
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onprogress">
            <descriptive>
                <description><p>
 Callback method to be invoked to notify about operation progress <br/>It is called every time a single source file has been completely added.
If the source file is big then the callback can also be called while the file is being processed.
                </p></description>
            </descriptive>
            <Type name="ArchiveFileProgressCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="options">
            <descriptive>
                <description><p>
 Additional options used to control how the sourceFile will be compressed and stored in the archive
                </p></description>
            </descriptive>
            <Type name="ArchiveFileEntryOptions" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if parameter is of the wrong type.
                </p></description>
                <description><p>
 with error type InvalidStateError, if ArchiveFile is not open.
                </p></description>
                <description><p>
 with error type InvalidAccessError, if the file mode is <var>&quot;r&quot;</var>.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="extractAll" id="::Archive::ArchiveFile::extractAll">
        <webidl>        long extractAll(<ref>FileReference</ref> destinationDirectory,
                        optional <ref>SuccessCallback</ref>? onsuccess,
                        optional <ref>ErrorCallback</ref>? onerror,
                        optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                        optional boolean? overwrite) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Extracts every file from this <em>ArchiveFile</em> to a given directory.
            </brief>
           <description>
            <p>
All extracted files will be located in the given directory.
            </p>
            <p>
The <var>overwrite</var> attribute determines whether extracted files can overwrite existing files.
            </p>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError: If the given <em>destinationDirectory</em> does not exist              </li>
              <li>
IOError: If destinationDirectory can not be written to (e.g due to insufficient permissions)              </li>
              <li>
InvalidModificationError: If during extracting it is detected that an existing file would
have to be overwritten and the <em>overwrite</em> argument is <var>false</var>              </li>
              <li>
UnknownError: In any other error case              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> function errorCallback(error) {
     console.log(error);
 }

 function successCallback() {
     console.log(&quot;done&quot;);
 }

 function progressCallback(opId, val, name) {
     console.log(&quot;extracting operation (: &quot; + opId + &quot;) is in progress (&quot; + (val * 100).toFixed(1) + &quot;%)&quot;);
 }

 function openSuccess(archive) {
     archive.extractAll(&quot;music&quot;, successCallback, errorCallback, progressCallback);
 }

 tizen.archive.open(&quot;downloads/some_archive.zip&quot;, &quot;r&quot;, openSuccess);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long Task ID which can be used to cancel the operation with abort()
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="destinationDirectory">
            <descriptive>
                <description><p>
 Directory where extracted files will be stored <br/>Specified as a virtual path or a <em>File</em> object representing a directory.
                </p></description>
            </descriptive>
            <Type name="FileReference"/>
          </Argument>
          <Argument optional="optional" name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when an archive is extracted successfully
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onprogress">
            <descriptive>
                <description><p>
 Callback method to be invoked while the extracting is in progress <br/>The onprogress callback is called at least once. It will be invoked for every extracted file.
                </p></description>
            </descriptive>
            <Type name="ArchiveFileProgressCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="overwrite">
            <descriptive>
                <description><p>
 Flag indicating whether to overwrite or keep the existing files with the same name in the <var>destinationDirectory</var> location when extracting an archive <br/>By default, this attribute is set to <var>false</var>.
                </p></description>
            </descriptive>
            <Type type="boolean" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if parameter is of the wrong type.
                </p></description>
                <description><p>
 with error type InvalidStateError, if ArchiveFile is not open.
                </p></description>
                <description><p>
 with error type InvalidAccessError, if the file mode is <var>&quot;w&quot;</var> or <var>&quot;a&quot;</var>.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getEntries" id="::Archive::ArchiveFile::getEntries">
        <webidl>        long getEntries(<ref>ArchiveFileEntryArraySuccessCallback</ref> onsuccess,
                        optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Retrieves information about the member files in <em>ArchiveFile</em>.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
UnknownError: In case of any error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> function errorCallback(error) {
     console.log(error);
 }

 function getEntriesSuccess(entries) {
     console.log(&quot;Entries length: &quot; + entries.length);
     for (var i=0; i &#60; entries.length; i++) {
         console.log(entries[i].name);
     }
 }

 function openSuccess(archive) {
     archive.getEntries(getEntriesSuccess, errorCallback);
 }

 tizen.archive.open(&quot;downloads/some_archive.zip&quot;, &quot;r&quot;, openSuccess, errorCallback);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long Task ID which can be used to cancel the operation with abort()
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when information about all the files in the archive is successfully retrieved
                </p></description>
            </descriptive>
            <Type name="ArchiveFileEntryArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if parameter is of the wrong type.
                </p></description>
                <description><p>
 with error type InvalidStateError, if ArchiveFile is not open.
                </p></description>
                <description><p>
 with error type InvalidAccessError, if the file mode is <var>&quot;w&quot;</var> or <var>&quot;a&quot;</var>.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getEntryByName" id="::Archive::ArchiveFile::getEntryByName">
        <webidl>        long getEntryByName(DOMString name,
                            <ref>ArchiveFileEntrySuccessCallback</ref> onsuccess,
                            optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Retrieves information about <em>ArchiveFileEntry</em> with the specified name in <em>ArchiveFile</em>.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError: If <em>ArchiveFileEntry</em> with the specific name does not exist              </li>
              <li>
UnknownError: In case of any other error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> function errorCallback(error) {
     console.log(error);
 }

 function getEntrySuccess(entry) {
     console.log(&quot;Entry: &quot; + entry.name + &quot; size: &quot; + entry.size);
 }

 function openSuccess(archive) {
     archive.getEntryByName(&quot;arch/my_file.txt&quot;, getEntrySuccess, errorCallback);
 }

 tizen.archive.open(&quot;downloads/some_archive.zip&quot;, &quot;r&quot;, openSuccess);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long Task ID which can be used to cancel the operation with abort()
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="name">
            <descriptive>
                <description><p>
 Name of <em>ArchiveFileEntry</em> to extract
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when a file matched with the given name is found
                </p></description>
            </descriptive>
            <Type name="ArchiveFileEntrySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if parameter is of the wrong type.
                </p></description>
                <description><p>
 with error type InvalidStateError, if ArchiveFile is not opene
                </p></description>
                <description><p>
 with error type InvalidAccessError, if the file mode is <var>&quot;w&quot;</var> or <var>&quot;a&quot;</var>.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="close" id="::Archive::ArchiveFile::close">
        <webidl>        void close() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Closes the <em>ArchiveFile</em>.
            </brief>
           <description>
            <p>
Call this method when the archive file is not used any more. Once you call this method, the archive file object will not be available and any further operation attempt results in an <em>InvalidStateError</em>.<br/>Calling <em>close()</em> on an archive file object which is already closed does not raise any exception.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="ArchiveFileEntry" id="::Archive::ArchiveFileEntry">
      <webidl>    interface ArchiveFileEntry {
        readonly attribute DOMString name;

        readonly attribute unsigned long long size;

        readonly attribute unsigned long long? compressedSize;

        readonly attribute Date modified;

        long extract(<ref>FileReference</ref> destinationDirectory,
                     optional <ref>SuccessCallback</ref>? onsuccess,
                     optional <ref>ErrorCallback</ref>? onerror,
                     optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                     optional boolean? stripName,
                     optional boolean? overwrite) raises(<ref>WebAPIException</ref>);

    };</webidl>
      <descriptive>
          <brief>
 The ArchiveFileEntry interface provides access to ArchiveFile member information and file data.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <Attribute readonly="readonly" name="name" id="::Archive::ArchiveFileEntry::name">
        <webidl>        readonly attribute DOMString name;</webidl>
        <descriptive>
            <brief>
 Path identifying the member file of ArchiveFile. <br/>This is a full path with the directory and base name of the entry.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="size" id="::Archive::ArchiveFileEntry::size">
        <webidl>        readonly attribute unsigned long long size;</webidl>
        <descriptive>
            <brief>
 Original size of the member file [bytes].
            </brief>
           <description>
            <p>
If the ArchiveFileEntry member is a folder, the attribute value will be the sum of sizes of all files in this directory.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="unsigned long long"/>
      </Attribute>
      <Attribute readonly="readonly" name="compressedSize" id="::Archive::ArchiveFileEntry::compressedSize">
        <webidl>        readonly attribute unsigned long long? compressedSize;</webidl>
        <descriptive>
            <brief>
 Amount of storage space used by the member file, which may be compressed, in ArchiveFile [bytes].
            </brief>
           <description>
            <p>
If ArchiveFileEntry member is a folder, the attribute will be sum of the sizes of all files in this directory.
            </p>
            <p>
Until a new entry is added to the archive, the compressedSize is <var>null</var>            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="unsigned long long" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="modified" id="::Archive::ArchiveFileEntry::modified">
        <webidl>        readonly attribute Date modified;</webidl>
        <descriptive>
            <brief>
 Date and time stored with the member file.
This is usually the modification date of the file.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="Date"/>
      </Attribute>
      <Operation name="extract" id="::Archive::ArchiveFileEntry::extract">
        <webidl>        long extract(<ref>FileReference</ref> destinationDirectory,
                     optional <ref>SuccessCallback</ref>? onsuccess,
                     optional <ref>ErrorCallback</ref>? onerror,
                     optional <ref>ArchiveFileProgressCallback</ref>? onprogress,
                     optional boolean? stripName,
                     optional boolean? overwrite) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Extracts ArchiveFileEntry to the given location.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError: If the given <em>destinationDirectory</em> does not exist              </li>
              <li>
InvalidModificationError: If the file already exists and overwriting is not allowed              </li>
              <li>
IOError: If destinationDirectory can not be written to              </li>
              <li>
UnknownError: In case of any other error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> function errorCallback(error) {
     console.log(error);
 }

 function extractSuccessCallback() {
     console.log(&quot;done&quot;);
 }

 function getEntrySuccess(entry) {
     entry.extract(&quot;downloads/extract&quot;, extractSuccessCallback, errorCallback);
 }

 function openSuccess(archive) {
     archive.getEntryByName(&quot;my_file.txt&quot;, getEntrySuccess, errorCallback);
 }

 tizen.archive.open(&quot;downloads/some_archive.zip&quot;, &quot;r&quot;, openSuccess, errorCallback);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long Task ID which can be used to cancel the operation with abort()
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="destinationDirectory">
            <descriptive>
                <description><p>
 Directory where extracted files will be stored <br/>Given as a virtual path or a <em>File</em> object representing a directory.
                </p></description>
            </descriptive>
            <Type name="FileReference"/>
          </Argument>
          <Argument optional="optional" name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when an extract operation is completed
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onprogress">
            <descriptive>
                <description><p>
 Callback method to be invoked while the extracting is in progress <br/>The onprogress callback is called at least once. It will be invoked for every extracted file.
                </p></description>
            </descriptive>
            <Type name="ArchiveFileProgressCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="stripName">
            <descriptive>
                <description><p>
 Flag which determines if directory name part of <em>ArchiveFileEntry</em> should be removed or preserved <br/>The default value is <var>false</var>. If it is <var>true</var>, use only base name (part after last slash) as a target path.
                </p></description>
            </descriptive>
            <Type type="boolean" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="overwrite">
            <descriptive>
                <description><p>
 Flag which determines if it possible to overwrite files when the decompressed file already exists in this destination location <br/>The default value is <var>false</var>.
                </p></description>
            </descriptive>
            <Type type="boolean" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if parameter is of the wrong type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if directory parameter does not represent a directory.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="ArchiveFileSuccessCallback" id="::Archive::ArchiveFileSuccessCallback">
      <webidl>    [Callback=FunctionOnly, NoInterfaceObject] interface ArchiveFileSuccessCallback {
        void onsuccess(<ref>ArchiveFile</ref> archive);
    };</webidl>
      <descriptive>
          <brief>
 The ArchiveFileSuccessCallback interface provides a SuccessCallback for the ArchiveManager::open() method.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Archive::ArchiveFileSuccessCallback::onsuccess">
        <webidl>        void onsuccess(<ref>ArchiveFile</ref> archive);</webidl>
        <descriptive>
            <brief>
 Called when the archive file with the given name is ready to use.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="archive">
            <descriptive>
                <description><p>
 Archive file object
                </p></description>
            </descriptive>
            <Type name="ArchiveFile"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ArchiveFileEntrySuccessCallback" id="::Archive::ArchiveFileEntrySuccessCallback">
      <webidl>    [Callback=FunctionOnly, NoInterfaceObject] interface ArchiveFileEntrySuccessCallback {
        void onsuccess(<ref>ArchiveFileEntry</ref> entry);
    };</webidl>
      <descriptive>
          <brief>
 The ArchiveFileEntrySuccessCallback interface provides a SuccessCallback for the ArchiveFile::getEntryByName() method.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Archive::ArchiveFileEntrySuccessCallback::onsuccess">
        <webidl>        void onsuccess(<ref>ArchiveFileEntry</ref> entry);</webidl>
        <descriptive>
            <brief>
 Called when the file with the given name through getEntryByName() is found successfully.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="entry">
            <descriptive>
                <description><p>
 ArchiveFileEntry object representing the file found in ArchiveFile
                </p></description>
            </descriptive>
            <Type name="ArchiveFileEntry"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ArchiveFileEntryArraySuccessCallback" id="::Archive::ArchiveFileEntryArraySuccessCallback">
      <webidl>    [Callback=FunctionOnly, NoInterfaceObject] interface ArchiveFileEntryArraySuccessCallback {
        void onsuccess(<ref>ArchiveFileEntry</ref>[] entries);
    };</webidl>
      <descriptive>
          <brief>
 The ArchiveFileEntryArraySuccessCallback interface provides a SuccessCallback for the ArchiveFile::getEntries() method.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Archive::ArchiveFileEntryArraySuccessCallback::onsuccess">
        <webidl>        void onsuccess(<ref>ArchiveFileEntry</ref>[] entries);</webidl>
        <descriptive>
            <brief>
 Called when all file entries in the archive file are retrieved successfully.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="entries">
            <descriptive>
                <description><p>
 List of ArchiveFileEntry objects found in ArchiveFile
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="ArchiveFileEntry"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ArchiveFileProgressCallback" id="::Archive::ArchiveFileProgressCallback">
      <webidl>    [Callback=FunctionOnly, NoInterfaceObject] interface ArchiveFileProgressCallback {
        void onprogress(long operationIdentifier, double value, DOMString filename);
    };</webidl>
      <descriptive>
          <brief>
 The ArchiveFileProgressCallback interface provides a ProgressCallback for ArchiveFile and ArchiveFileEntry methods.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onprogress" id="::Archive::ArchiveFileProgressCallback::onprogress">
        <webidl>        void onprogress(long operationIdentifier, double value, DOMString filename);</webidl>
        <descriptive>
            <brief>
 Called to signal compressing or extracting operation progress.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="operationIdentifier">
            <descriptive>
                <description><p>
 Operation identifier for which progress is reported
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
          <Argument name="value">
            <descriptive>
                <description><p>
 Progress of the operation, value between 0.0 and 1.0 where 1.0 is 100% progress
                </p></description>
            </descriptive>
            <Type type="double"/>
          </Argument>
          <Argument name="filename">
            <descriptive>
                <description><p>
 Name of the compressed or extracted file
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="Content" id="::Content">
    <webidl>module Content {

  enum ContentDirectoryStorageType { &quot;INTERNAL&quot;, &quot;EXTERNAL&quot; };

  enum ContentType { &quot;IMAGE&quot;, &quot;VIDEO&quot;, &quot;AUDIO&quot;, &quot;OTHER&quot; };

  enum AudioContentLyricsType { &quot;SYNCHRONIZED&quot;, &quot;UNSYNCHRONIZED&quot; };

  enum ImageContentOrientation { &quot;NORMAL&quot;, &quot;FLIP_HORIZONTAL&quot;, &quot;ROTATE_180&quot;, &quot;FLIP_VERTICAL&quot;, &quot;TRANSPOSE&quot;, &quot;ROTATE_90&quot;, &quot;TRANSVERSE&quot;, &quot;ROTATE_270&quot; };

  typedef DOMString ContentId;

  typedef DOMString ContentDirectoryId;

  typedef DOMString PlaylistId;

  [NoInterfaceObject] interface ContentManagerObject {
    readonly attribute <ref>ContentManager</ref> content;
  };
  <ref>Tizen</ref> implements <ref>ContentManagerObject</ref>;

  [NoInterfaceObject] interface ContentManager {

    void update(<ref>Content</ref> content) raises(<ref>WebAPIException</ref>);

    void updateBatch(<ref>Content</ref>[] contents,
                     optional <ref>SuccessCallback</ref>? successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void getDirectories(<ref>ContentDirectoryArraySuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void find(<ref>ContentArraySuccessCallback</ref> successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback,
              optional <ref>ContentDirectoryId</ref>? directoryId,
              optional <ref>AbstractFilter</ref>? filter,
              optional <ref>SortMode</ref>? sortMode,
              optional unsigned long? count,
              optional unsigned long? offset) raises(<ref>WebAPIException</ref>);


    void scanFile(DOMString contentURI,
                  optional <ref>ContentScanSuccessCallback</ref>? successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void setChangeListener(<ref>ContentChangeCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);

    void unsetChangeListener() raises(<ref>WebAPIException</ref>);

    void getPlaylists(<ref>PlaylistArraySuccessCallback</ref> successCallback,
                      optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void createPlaylist(DOMString name,
                        <ref>PlaylistSuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback,
                        optional <ref>Playlist</ref>? sourcePlaylist) raises(<ref>WebAPIException</ref>);

    void removePlaylist(<ref>PlaylistId</ref> id,
                        optional <ref>SuccessCallback</ref>? successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

  };

  [Callback=FunctionOnly, NoInterfaceObject] interface ContentArraySuccessCallback {
    void onsuccess(<ref>Content</ref>[] contents);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface ContentDirectoryArraySuccessCallback {
    void onsuccess(<ref>ContentDirectory</ref>[] directories);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface ContentScanSuccessCallback {
    void onsuccess(DOMString contentURI);
  };

  [Callback, NoInterfaceObject] interface ContentChangeCallback {
    void oncontentadded(<ref>Content</ref> content);

    void oncontentupdated(<ref>Content</ref> content);

    void oncontentremoved(<ref>ContentId</ref> id);
  };


  [NoInterfaceObject] interface ContentDirectory {

    readonly attribute <ref>ContentDirectoryId</ref> id;

    readonly attribute DOMString directoryURI;

    readonly attribute DOMString title;

    readonly attribute <ref>ContentDirectoryStorageType</ref> storageType;

    readonly attribute Date? modifiedDate;

   };

  [NoInterfaceObject] interface Content {

    readonly attribute DOMString[] editableAttributes;

    readonly attribute <ref>ContentId</ref> id;

    attribute DOMString name;

    readonly attribute <ref>ContentType</ref> type;

    readonly attribute DOMString mimeType;

    readonly attribute DOMString title;

    readonly attribute DOMString contentURI;

    readonly attribute DOMString[]? thumbnailURIs;

    readonly attribute Date? releaseDate;

    readonly attribute Date? modifiedDate;

    readonly attribute unsigned long size;

    attribute DOMString? description;

    attribute unsigned long rating;

    attribute boolean isFavorite;
  };

  [NoInterfaceObject] interface VideoContent : <ref>Content</ref> {

    attribute <ref>SimpleCoordinates</ref>? geolocation;

    readonly attribute DOMString? album;

    readonly attribute DOMString[]? artists;

    readonly attribute unsigned long duration;

    readonly attribute unsigned long width;

    readonly attribute unsigned long height;

  };


  [NoInterfaceObject] interface AudioContentLyrics {

    readonly attribute <ref>AudioContentLyricsType</ref> type;

    readonly attribute unsigned long[] timestamps;

    readonly attribute DOMString[] texts;
  };

  [NoInterfaceObject] interface AudioContent : <ref>Content</ref> {

    readonly attribute DOMString? album;

    readonly attribute DOMString[]? genres;

    readonly attribute DOMString[]? artists;

    readonly attribute DOMString[]? composers;

    readonly attribute <ref>AudioContentLyrics</ref>? lyrics;

    readonly attribute DOMString? copyright;

    readonly attribute unsigned long bitrate;

    readonly attribute unsigned short? trackNumber;

    readonly attribute unsigned long duration;

  };

  [NoInterfaceObject] interface ImageContent : <ref>Content</ref> {

    attribute <ref>SimpleCoordinates</ref>? geolocation;

    readonly attribute unsigned long width;

    readonly attribute unsigned long height;

    attribute <ref>ImageContentOrientation</ref> orientation;
  };

  [NoInterfaceObject]
  interface PlaylistItem {
    readonly attribute <ref>Content</ref> content;
  };

  [NoInterfaceObject]
  interface Playlist {
    readonly attribute <ref>PlaylistId</ref> id;

    attribute DOMString name raises(<ref>WebAPIException</ref>);

    readonly attribute long numberOfTracks;

    attribute DOMString? thumbnailURI raises(<ref>WebAPIException</ref>);

    void add(<ref>Content</ref> item) raises(<ref>WebAPIException</ref>);

    void addBatch(<ref>Content</ref>[] items,
                  optional <ref>SuccessCallback</ref>? successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void remove(<ref>PlaylistItem</ref> item) raises(<ref>WebAPIException</ref>);

    void removeBatch(<ref>PlaylistItem</ref>[] items,
                     optional <ref>SuccessCallback</ref>? successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void get(<ref>PlaylistItemArraySuccessCallback</ref> successCallback,
             optional <ref>ErrorCallback</ref>? errorCallback,
             optional long? count,
             optional long? offset) raises(<ref>WebAPIException</ref>);

    void setOrder(<ref>PlaylistItem</ref>[] items,
            optional <ref>SuccessCallback</ref>? successCallback,
            optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void move(<ref>PlaylistItem</ref> item,
              long delta,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface PlaylistArraySuccessCallback {
    void onsuccess(<ref>Playlist</ref>[] playlists);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface PlaylistSuccessCallback {
    void onsuccess(<ref>Playlist</ref> playlist);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface PlaylistItemArraySuccessCallback {
    void onsuccess(<ref>PlaylistItem</ref>[] items);
  };
};</webidl>
    <descriptive>
        <brief>
 The Content API provides functionality to discover content such as images, videos, music, or others.
        </brief>
       <description>
        <p>
It is possible to search for specific content using filters.
The API also supports setting the attributes of specific content.
        </p>
        <p>
For more information on the Content features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/content_guide/mediacontent.htm">Content Guide</a>.
        </p>
        <p>
For more information about how to use the playlist feature of the Content API, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/content_guide/playlist.htm">Playlist Guide</a>.
        </p>
        <p>
Playlist functionality has been added in Tizen 2.3.
        </p>
       </description>
        <version>
 2.0
        </version>
    </descriptive>
    <Enum name="ContentDirectoryStorageType" id="::Content::ContentDirectoryStorageType">
      <webidl>  enum ContentDirectoryStorageType { &quot;INTERNAL&quot;, &quot;EXTERNAL&quot; };</webidl>
      <descriptive>
         <description>
          <p>
Defines whether a content directory is stored on internal or external storage (such as a removable memory card).
          </p>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <EnumValue stringvalue="INTERNAL">
        <webidl> &quot;INTERNAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="EXTERNAL">
        <webidl> &quot;EXTERNAL</webidl>
      </EnumValue>
    </Enum>
    <Enum name="ContentType" id="::Content::ContentType">
      <webidl>  enum ContentType { &quot;IMAGE&quot;, &quot;VIDEO&quot;, &quot;AUDIO&quot;, &quot;OTHER&quot; };</webidl>
      <descriptive>
         <description>
          <p>
Defines the type of content such as an image, video, audio, or any other.
          </p>
         </description>
          <version>
 2.0
          </version>
          <remark>
 &quot;OTHER&quot; type is added since Tizen 2.1.
          </remark>
      </descriptive>
      <EnumValue stringvalue="IMAGE">
        <webidl> &quot;IMAGE</webidl>
      </EnumValue>
      <EnumValue stringvalue="VIDEO">
        <webidl> &quot;VIDEO</webidl>
      </EnumValue>
      <EnumValue stringvalue="AUDIO">
        <webidl> &quot;AUDIO</webidl>
      </EnumValue>
      <EnumValue stringvalue="OTHER">
        <webidl> &quot;OTHER</webidl>
      </EnumValue>
    </Enum>
    <Enum name="AudioContentLyricsType" id="::Content::AudioContentLyricsType">
      <webidl>  enum AudioContentLyricsType { &quot;SYNCHRONIZED&quot;, &quot;UNSYNCHRONIZED&quot; };</webidl>
      <descriptive>
         <description>
          <p>
Defines whether the lyrics supplied with an audio file is time-synchronized.
          </p>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <EnumValue stringvalue="SYNCHRONIZED">
        <webidl> &quot;SYNCHRONIZED</webidl>
      </EnumValue>
      <EnumValue stringvalue="UNSYNCHRONIZED">
        <webidl> &quot;UNSYNCHRONIZED</webidl>
      </EnumValue>
    </Enum>
    <Enum name="ImageContentOrientation" id="::Content::ImageContentOrientation">
      <webidl>  enum ImageContentOrientation { &quot;NORMAL&quot;, &quot;FLIP_HORIZONTAL&quot;, &quot;ROTATE_180&quot;, &quot;FLIP_VERTICAL&quot;, &quot;TRANSPOSE&quot;, &quot;ROTATE_90&quot;, &quot;TRANSVERSE&quot;, &quot;ROTATE_270&quot; };</webidl>
      <descriptive>
         <description>
          <p>
Defines the orientation of an image.
          </p>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <EnumValue stringvalue="NORMAL">
        <webidl> &quot;NORMAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="FLIP_HORIZONTAL">
        <webidl> &quot;FLIP_HORIZONTAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="ROTATE_180">
        <webidl> &quot;ROTATE_180</webidl>
      </EnumValue>
      <EnumValue stringvalue="FLIP_VERTICAL">
        <webidl> &quot;FLIP_VERTICAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="TRANSPOSE">
        <webidl> &quot;TRANSPOSE</webidl>
      </EnumValue>
      <EnumValue stringvalue="ROTATE_90">
        <webidl> &quot;ROTATE_90</webidl>
      </EnumValue>
      <EnumValue stringvalue="TRANSVERSE">
        <webidl> &quot;TRANSVERSE</webidl>
      </EnumValue>
      <EnumValue stringvalue="ROTATE_270">
        <webidl> &quot;ROTATE_270</webidl>
      </EnumValue>
    </Enum>
    <Typedef name="ContentId" id="::Content::ContentId">
      <webidl>  typedef DOMString ContentId;</webidl>
      <descriptive>
          <brief>
 Content identifier.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <Type type="DOMString"/>
    </Typedef>
    <Typedef name="ContentDirectoryId" id="::Content::ContentDirectoryId">
      <webidl>  typedef DOMString ContentDirectoryId;</webidl>
      <descriptive>
          <brief>
 Content directory identifier.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <Type type="DOMString"/>
    </Typedef>
    <Typedef name="PlaylistId" id="::Content::PlaylistId">
      <webidl>  typedef DOMString PlaylistId;</webidl>
      <descriptive>
          <brief>
 Playlist identifier.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <Type type="DOMString"/>
    </Typedef>
    <Interface name="ContentManagerObject" id="::Content::ContentManagerObject">
      <webidl>  [NoInterfaceObject] interface ContentManagerObject {
    readonly attribute <ref>ContentManager</ref> content;
  };</webidl>
      <descriptive>
          <brief>
 Defines what is instantiated by the Tizen object.
          </brief>
         <description>
          <p>
The <em>tizen.content </em>object allows accessing the functionality of the Content module.
          </p>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="content" id="::Content::ContentManagerObject::content">
        <webidl>    readonly attribute <ref>ContentManager</ref> content;</webidl>
        <Type name="ContentManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="ContentManagerObject">
      <webidl>  <ref>Tizen</ref> implements <ref>ContentManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="ContentManager" id="::Content::ContentManager">
      <webidl>  [NoInterfaceObject] interface ContentManager {

    void update(<ref>Content</ref> content) raises(<ref>WebAPIException</ref>);

    void updateBatch(<ref>Content</ref>[] contents,
                     optional <ref>SuccessCallback</ref>? successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void getDirectories(<ref>ContentDirectoryArraySuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void find(<ref>ContentArraySuccessCallback</ref> successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback,
              optional <ref>ContentDirectoryId</ref>? directoryId,
              optional <ref>AbstractFilter</ref>? filter,
              optional <ref>SortMode</ref>? sortMode,
              optional unsigned long? count,
              optional unsigned long? offset) raises(<ref>WebAPIException</ref>);


    void scanFile(DOMString contentURI,
                  optional <ref>ContentScanSuccessCallback</ref>? successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void setChangeListener(<ref>ContentChangeCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);

    void unsetChangeListener() raises(<ref>WebAPIException</ref>);

    void getPlaylists(<ref>PlaylistArraySuccessCallback</ref> successCallback,
                      optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void createPlaylist(DOMString name,
                        <ref>PlaylistSuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback,
                        optional <ref>Playlist</ref>? sourcePlaylist) raises(<ref>WebAPIException</ref>);

    void removePlaylist(<ref>PlaylistId</ref> id,
                        optional <ref>SuccessCallback</ref>? successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

  };</webidl>
      <descriptive>
          <brief>
 The ContentManager interface provides operations to retrieve and manipulate content.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="update" id="::Content::ContentManager::update">
        <webidl>    void update(<ref>Content</ref> content) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Updates attributes of content in the content database synchronously.
            </brief>
           <description>
            <p>
When an application has changed some attributes of the content, this method allows
writing it back to the content database.
            </p>
           </description>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <remark>
 The <em>editableAttributes</em> in the <em>Content</em> interface indicates
the attributes that can be changed.
This API does not support updating the metadata of a file.
            </remark>
            <Code> // Assume the content is a Content object as a result of find method.
 // Check the description is editable, and then set a description.
 if (content.editableAttributes.indexOf(&quot;description&quot;) >= 0) {
     content.description = &quot;Sample content&quot;;
 }
 tizen.content.update(content);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="content">
            <descriptive>
                <description><p>
 The content to update.
                </p></description>
            </descriptive>
            <Type name="Content"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters
contain an invalid value.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="updateBatch" id="::Content::ContentManager::updateBatch">
        <webidl>    void updateBatch(<ref>Content</ref>[] contents,
                     optional <ref>SuccessCallback</ref>? successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Updates a batch of content attributes in the content database asynchronously.
            </brief>
           <description>
            <p>
When an application has changed any attributes in the array of content, this method allows writing them
back to the content database.
            </p>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError: If any of the input parameters contain an invalid value.              </li>
              <li>
UnknownError: In any other error case.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <remark>
 The <em>editableAttributes</em> in the <em>Content</em> interface indicates
the attributes that can be changed.
This API does not support updating the metadata of a file.
            </remark>
            <Code> // The following example increases rating of an content by 1

 function errorCB(err) {
     console.log( 'The following error occurred: ' +  err.name);
 }

 function successCB() {
     console.log('Attributes set successfully');
 }

 // Assume the content is a Content object as a result of find method.
 // Check the rating is editable, and then increase by 1.
 if (content.editableAttributes.indexOf(&quot;rating&quot;) >= 0) {
     content.rating++;
 }
 tizen.content.updateBatch([content], successCB, errorCB);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="contents">
            <descriptive>
                <description><p>
 Array of content to change.
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="Content"/>
            </Type>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when attributes have been changed.
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error has occurred.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getDirectories" id="::Content::ContentManager::getDirectories">
        <webidl>    void getDirectories(<ref>ContentDirectoryArraySuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets a list of content directories.
            </brief>
           <description>
            <p>
This method returns (via callback) a list of content directory objects. To obtain a list of contents
in a specific directory, use the find() method with the directory ID.
            </p>
            <p>
The errorCallback is launched with this error type:
            </p>
            <ul>
              <li>
UnknownError: In any other error case.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <Code> // The following example retrieves content directories in the storage.

 function errorCB(err) {
     console.log( 'The following error occurred: ' +  err.name);
 }

 function printDirectory(directory, index, directories) {
     console.log('directoryURI: ' + directory.directoryURI + ' Title: ' + directory.title);
 }
 function getDirectoriesCB(directories) {
     directories.forEach(printDirectory);
 }

 tizen.content.getDirectories(getDirectoriesCB, errorCB);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when content directories have been retrieved successfully.
                </p></description>
            </descriptive>
            <Type name="ContentDirectoryArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error has occurred.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="find" id="::Content::ContentManager::find">
        <webidl>    void find(<ref>ContentArraySuccessCallback</ref> successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback,
              optional <ref>ContentDirectoryId</ref>? directoryId,
              optional <ref>AbstractFilter</ref>? filter,
              optional <ref>SortMode</ref>? sortMode,
              optional unsigned long? count,
              optional unsigned long? offset) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Finds contents that satisfy the conditions set by a filter.
            </brief>
           <description>
            <p>
This method allows searching based on a supplied filter. For more details on AbstractFilter, see the
<a href="tizen.html#::Tizen::AbstractFilter">Tizen</a> module. The filter allows precise searching such
as &quot;return all songs by artist U2, ordered by name&quot;.
            </p>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError: If any of the input parameters contain an invalid value.              </li>
              <li>
UnknownError: In any other error case.              </li>
            </ul>
           </description>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.read
            </privilege>
            <Code> // The following example retrieves all songs from the album &quot;The Joshua Tree&quot;, by artist &quot;U2&quot;, ordered by the name.
 var count = 100;
 var offset = 0;
 var sortMode = new tizen.SortMode(&quot;name&quot;, &quot;ASC&quot;);
 var artistFilter = new tizen.AttributeFilter(&quot;artists&quot;, &quot;EXACTLY&quot;, &quot;U2&quot;);
 var albumFilter = new tizen.AttributeFilter(&quot;album&quot;, &quot;EXACTLY&quot;, &quot;The Joshua Tree&quot;);
 var filter = new tizen.CompositeFilter(&quot;INTERSECTION&quot;, [albumFilter, artistFilter]);

 function errorCB(err) {
     console.log( 'The following error occurred: ' +  err.name);
 }

 function printContent(content, index, contents) {
     console.log('Name: ' + content.name + ' Title: ' + content.title + 'URL: ' + content.contentURI + 'MIME: ' + content.mimeType);
 }

 function findCB(contents) {
     console.log('The Joshua Tree by U2:');
     contents.forEach(printContent);
     // Increase the offset as much as the count and then find content again.
     if (contents.length === count) {
         offset += count;
         tizen.content.find(findCB, errorCB, null, filter, sortMode, count, offset);
     }
 }

 tizen.content.find(findCB, errorCB, null, filter, sortMode, count, offset);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when content has been retrieved.
                </p></description>
            </descriptive>
            <Type name="ContentArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error has occurred.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="directoryId">
            <descriptive>
                <description><p>
 Directory ID that is used to select content to retrieve in a specified directory.
                </p></description>
            </descriptive>
            <Type name="ContentDirectoryId" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="filter">
            <descriptive>
                <description><p>
 Filter that is used to select content to retrieve.
                </p></description>
            </descriptive>
            <Type name="AbstractFilter" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="sortMode">
            <descriptive>
                <description><p>
 Used to determine the sort order in which the contents are returned.
                </p></description>
            </descriptive>
            <Type name="SortMode" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="count">
            <descriptive>
                <description><p>
 Maximum amount of content to return. If <em>count</em> is negative, InvalidValuesError is reported through the errorCallback.
                </p></description>
            </descriptive>
            <Type type="unsigned long" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="offset">
            <descriptive>
                <description><p>
 Offset of the result set. If <em>offset</em> is a negative number, InvalidValuesError is reported through the errorCallback.
                </p></description>
            </descriptive>
            <Type type="unsigned long" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="scanFile" id="::Content::ContentManager::scanFile">
        <webidl>    void scanFile(DOMString contentURI,
                  optional <ref>ContentScanSuccessCallback</ref>? successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Scans a file to create or update content in the content database.
            </brief>
           <description>
            <p>
When an application creates or updates content, this method allows to scan it
and then insert or update the content in the content database.
            </p>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
UnknownError: In case of any error detected asynchronously              </li>
            </ul>
           </description>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <Code> // The following example scan 'tizen.jpg' in media directory

 function errorCB(err) {
     console.log( 'The following error occurred: ' +  err.name);
 }

 function successCB(path) {
     console.log('scanning is completed');
 }

 tizen.filesystem.resolve(&quot;images/tizen.jpg&quot;, function(imageFile) {
     tizen.content.scanFile(imageFile.toURI(), successCB, errorCB);
 });

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="contentURI">
            <descriptive>
                <description><p>
 URI of content to scan.
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when scanning has been completed.
                </p></description>
            </descriptive>
            <Type name="ContentScanSuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error has occurred.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters
contain an invalid value (e.g. given <em>contentURI</em> is an empty string).
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setChangeListener" id="::Content::ContentManager::setChangeListener">
        <webidl>    void setChangeListener(<ref>ContentChangeCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sets a listener to receive notifications of content changes.
            </brief>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.read
            </privilege>
            <Code> var listener= {
    oncontentadded: function(content) {
        console.log(content.contentURI + ' content is added');
    },
    oncontentupdated: function(content) {
        console.log(content.contentURI + ' content is updated');
    },
    oncontentremoved: function(id) {
        console.log(id + ' is removed');
    }
 };

 // Registers to be notified when the content changes
 tizen.content.setChangeListener(listener);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="changeCallback">
            <descriptive>
                <description><p>
 A callback to be invoked for receiving a content change notification.
                </p></description>
            </descriptive>
            <Type name="ContentChangeCallback"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="unsetChangeListener" id="::Content::ContentManager::unsetChangeListener">
        <webidl>    void unsetChangeListener() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Unsets the listener to unsubscribe from receiving notifications for content changes.
            </brief>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.read
            </privilege>
            <Code> tizen.content.unsetChangeListener();

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getPlaylists" id="::Content::ContentManager::getPlaylists">
        <webidl>    void getPlaylists(<ref>PlaylistArraySuccessCallback</ref> successCallback,
                      optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets all playlists.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
UnknownError: In case of any error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.read
            </privilege>
            <Code> var gPlaylists;

 function getPlaylistsFail(err) {
     console.log(&quot;getPlaylists failed: &quot; + err);
 }

 function getPlaylistsSuccess(playlists) {
     var cur, i;
     gPlaylists = playlists;
     for(i = 0; i &#60; gPlaylists.length; ++i) {
         cur = gPlaylists[i];
         console.log(&quot;[&quot; + i + &quot;] name:&quot; + cur.name + &quot; num tracks:&quot; +
                 cur.numberOfTracks);
     }
 }

 tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when retrieving a list of all playlists completes
                </p></description>
            </descriptive>
            <Type name="PlaylistArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="createPlaylist" id="::Content::ContentManager::createPlaylist">
        <webidl>    void createPlaylist(DOMString name,
                        <ref>PlaylistSuccessCallback</ref> successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback,
                        optional <ref>Playlist</ref>? sourcePlaylist) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Creates a new playlist.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError: If <var>name</var> is empty or is same as the name of an existing playlist              </li>
              <li>
UnknownError: In case of any other error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <Code> var gPlaylists;
 var gPlaylist;

 function getPlaylistsFail(err) {
     console.log(&quot;getPlaylists failed: &quot; + err.message);
 }

 function getPlaylistsSuccess(playlists) {
     var cur, i;
     gPlaylists = playlists;
     for(i = 0; i &#60; gPlaylists.length; ++i) {
         cur = gPlaylists[i];
         console.log(&quot;[&quot; + i + &quot;] name:&quot; + cur.name + &quot; num tracks:&quot; +
                 cur.numberOfTracks);
     }
 }

 function findSuccess(contents) {
     if (contents.length > 0) {
         gPlaylist.add(contents[0]);
     }

     tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail);
 }

 function findFail(err) {
     console.log(&quot;find FAIL: &quot; + err.message);
 }

 function createSuccess(playlist) {
     console.log(&quot;create SUCCESS&quot;);

     gPlaylist = playlist;
     tizen.content.find(findSuccess, findFail, null,
             new tizen.AttributeFilter(&quot;type&quot;, &quot;EXACTLY&quot;, &quot;AUDIO&quot;));
 }

 function createFail(err) {
     console.log(&quot;create FAIL: &quot; + err.message);
 }

 tizen.content.createPlaylist(&quot;My new playlist&quot;, createSuccess, createFail);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="name">
            <descriptive>
                <description><p>
 Name of the new playlist (case sensitive)
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked to provide a created playlist
                </p></description>
            </descriptive>
            <Type name="PlaylistSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="sourcePlaylist">
            <descriptive>
                <description><p>
 Optional existing playlist to clone
                </p></description>
            </descriptive>
            <Type name="Playlist" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removePlaylist" id="::Content::ContentManager::removePlaylist">
        <webidl>    void removePlaylist(<ref>PlaylistId</ref> id,
                        optional <ref>SuccessCallback</ref>? successCallback,
                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes a playlist.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
UnknownError: In case of any error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <Code> var gPlaylists;

 function removePlaylistSuccess() {
     console.log(&quot;removePlaylist SUCCESS&quot;);
 }

 function removePlaylistFail(err) {
     console.log(&quot;removePlaylist FAIL: &quot; + err);
 }

 function getPlaylistsFail(err) {
     console.log(&quot;getPlaylists failed: &quot; + err);
 }

 function getPlaylistsSuccess(playlists) {
     var cur, i;
     gPlaylists = playlists;
     for(i = 0; i &#60; gPlaylists.length; ++i) {
         cur = gPlaylists[i];
         console.log(&quot;[&quot; + i + &quot;] name:&quot; + cur.name + &quot; num tracks:&quot; +
                 cur.numberOfTracks);
     }

     if(gPlaylists.length &#60; 1) {
         console.log(&quot;Please add at least 1 playlist&quot;);
         return;
     }

     console.log(&quot;will remove playlist at index [0] name:&quot;
             + gPlaylists[0].name);

     tizen.content.removePlaylist(gPlaylists[0].id, removePlaylistSuccess,
             removePlaylistFail);
 }

 tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 Identifier of a playlist to remove
                </p></description>
            </descriptive>
            <Type name="PlaylistId"/>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when removing a playlist completes
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="ContentArraySuccessCallback" id="::Content::ContentArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface ContentArraySuccessCallback {
    void onsuccess(<ref>Content</ref>[] contents);
  };</webidl>
      <descriptive>
          <brief>
 The callback function used to return a list of content objects.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Content::ContentArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>Content</ref>[] contents);</webidl>
        <descriptive>
            <brief>
 Called when the list of content is retrieved successfully.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="contents">
            <descriptive>
                <description><p>
 The array of <em>Content </em>objects.
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="Content"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ContentDirectoryArraySuccessCallback" id="::Content::ContentDirectoryArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface ContentDirectoryArraySuccessCallback {
    void onsuccess(<ref>ContentDirectory</ref>[] directories);
  };</webidl>
      <descriptive>
          <brief>
 The callback function used to return a list of ContentDirectory objects.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Content::ContentDirectoryArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>ContentDirectory</ref>[] directories);</webidl>
        <descriptive>
            <brief>
 Called when the directory list is retrieved successfully.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="directories">
            <descriptive>
                <description><p>
 The array of <em>ContentDirectory </em>objects.
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="ContentDirectory"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ContentScanSuccessCallback" id="::Content::ContentScanSuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface ContentScanSuccessCallback {
    void onsuccess(DOMString contentURI);
  };</webidl>
      <descriptive>
          <brief>
 The callback function used to return content to scan.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Content::ContentScanSuccessCallback::onsuccess">
        <webidl>    void onsuccess(DOMString contentURI);</webidl>
        <descriptive>
            <brief>
 Called when the scanning has been completed.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="contentURI">
            <descriptive>
                <description><p>
 The URI of the <em>Content </em>objects.
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ContentChangeCallback" id="::Content::ContentChangeCallback">
      <webidl>  [Callback, NoInterfaceObject] interface ContentChangeCallback {
    void oncontentadded(<ref>Content</ref> content);

    void oncontentupdated(<ref>Content</ref> content);

    void oncontentremoved(<ref>ContentId</ref> id);
  };</webidl>
      <descriptive>
          <brief>
 This interface specifies a set of methods that are invoked every time a content change occurs.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="oncontentadded" id="::Content::ContentChangeCallback::oncontentadded">
        <webidl>    void oncontentadded(<ref>Content</ref> content);</webidl>
        <descriptive>
            <brief>
 Called when content is added.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="content">
            <descriptive>
                <description><p>
 The content to add.
                </p></description>
            </descriptive>
            <Type name="Content"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="oncontentupdated" id="::Content::ContentChangeCallback::oncontentupdated">
        <webidl>    void oncontentupdated(<ref>Content</ref> content);</webidl>
        <descriptive>
            <brief>
 Called when content is updated.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="content">
            <descriptive>
                <description><p>
 The content to update.
                </p></description>
            </descriptive>
            <Type name="Content"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="oncontentremoved" id="::Content::ContentChangeCallback::oncontentremoved">
        <webidl>    void oncontentremoved(<ref>ContentId</ref> id);</webidl>
        <descriptive>
            <brief>
 Called when content is removed.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 The ID of removed content.
                </p></description>
            </descriptive>
            <Type name="ContentId"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ContentDirectory" id="::Content::ContentDirectory">
      <webidl>  [NoInterfaceObject] interface ContentDirectory {

    readonly attribute <ref>ContentDirectoryId</ref> id;

    readonly attribute DOMString directoryURI;

    readonly attribute DOMString title;

    readonly attribute <ref>ContentDirectoryStorageType</ref> storageType;

    readonly attribute Date? modifiedDate;

   };</webidl>
      <descriptive>
          <brief>
 The ContentDirectory interface provides access to properties of a content directory.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="id" id="::Content::ContentDirectory::id">
        <webidl>    readonly attribute <ref>ContentDirectoryId</ref> id;</webidl>
        <descriptive>
            <brief>
 The opaque content directory identifier.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="ContentDirectoryId"/>
      </Attribute>
      <Attribute readonly="readonly" name="directoryURI" id="::Content::ContentDirectory::directoryURI">
        <webidl>    readonly attribute DOMString directoryURI;</webidl>
        <descriptive>
            <brief>
 The directory path on the device.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="title" id="::Content::ContentDirectory::title">
        <webidl>    readonly attribute DOMString title;</webidl>
        <descriptive>
            <brief>
 The directory name.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="storageType" id="::Content::ContentDirectory::storageType">
        <webidl>    readonly attribute <ref>ContentDirectoryStorageType</ref> storageType;</webidl>
        <descriptive>
            <brief>
 The type of device storage.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="ContentDirectoryStorageType"/>
      </Attribute>
      <Attribute readonly="readonly" name="modifiedDate" id="::Content::ContentDirectory::modifiedDate">
        <webidl>    readonly attribute Date? modifiedDate;</webidl>
        <descriptive>
            <brief>
 The last modified date for a directory.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="Date" nullable="nullable"/>
      </Attribute>
    </Interface>
    <Interface name="Content" id="::Content::Content">
      <webidl>  [NoInterfaceObject] interface Content {

    readonly attribute DOMString[] editableAttributes;

    readonly attribute <ref>ContentId</ref> id;

    attribute DOMString name;

    readonly attribute <ref>ContentType</ref> type;

    readonly attribute DOMString mimeType;

    readonly attribute DOMString title;

    readonly attribute DOMString contentURI;

    readonly attribute DOMString[]? thumbnailURIs;

    readonly attribute Date? releaseDate;

    readonly attribute Date? modifiedDate;

    readonly attribute unsigned long size;

    attribute DOMString? description;

    attribute unsigned long rating;

    attribute boolean isFavorite;
  };</webidl>
      <descriptive>
          <brief>
 The Content interface provides access to the properties of a content item.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="editableAttributes" id="::Content::Content::editableAttributes">
        <webidl>    readonly attribute DOMString[] editableAttributes;</webidl>
        <descriptive>
            <brief>
 The list of attributes that are editable to the local backend using the update() or updateBatch() method.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="id" id="::Content::Content::id">
        <webidl>    readonly attribute <ref>ContentId</ref> id;</webidl>
        <descriptive>
            <brief>
 The opaque content identifier.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="ContentId"/>
      </Attribute>
      <Attribute name="name" id="::Content::Content::name">
        <webidl>    attribute DOMString name;</webidl>
        <descriptive>
            <brief>
 The content name. The initial value is the file name of the content.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="type" id="::Content::Content::type">
        <webidl>    readonly attribute <ref>ContentType</ref> type;</webidl>
        <descriptive>
            <brief>
 The content type.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="ContentType"/>
      </Attribute>
      <Attribute readonly="readonly" name="mimeType" id="::Content::Content::mimeType">
        <webidl>    readonly attribute DOMString mimeType;</webidl>
        <descriptive>
            <brief>
 The content MIME type.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="title" id="::Content::Content::title">
        <webidl>    readonly attribute DOMString title;</webidl>
        <descriptive>
            <brief>
 The content title.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="contentURI" id="::Content::Content::contentURI">
        <webidl>    readonly attribute DOMString contentURI;</webidl>
        <descriptive>
            <brief>
 The URI to access the content.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="thumbnailURIs" id="::Content::Content::thumbnailURIs">
        <webidl>    readonly attribute DOMString[]? thumbnailURIs;</webidl>
        <descriptive>
            <brief>
 The array of content thumbnail URIs.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array" nullable="nullable">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="releaseDate" id="::Content::Content::releaseDate">
        <webidl>    readonly attribute Date? releaseDate;</webidl>
        <descriptive>
            <brief>
 The date when content has been released publicly. If only the release year is known, then the month and date are set to January and 1st respectively.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="Date" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="modifiedDate" id="::Content::Content::modifiedDate">
        <webidl>    readonly attribute Date? modifiedDate;</webidl>
        <descriptive>
            <brief>
 The last modified date for a content item.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="Date" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="size" id="::Content::Content::size">
        <webidl>    readonly attribute unsigned long size;</webidl>
        <descriptive>
            <brief>
 The file size of the content in bytes.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute name="description" id="::Content::Content::description">
        <webidl>    attribute DOMString? description;</webidl>
        <descriptive>
            <brief>
 The content description.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="rating" id="::Content::Content::rating">
        <webidl>    attribute unsigned long rating;</webidl>
        <descriptive>
            <brief>
 The content rating. This value can range from <var>0</var> to <var>10</var>.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute name="isFavorite" id="::Content::Content::isFavorite">
        <webidl>    attribute boolean isFavorite;</webidl>
        <descriptive>
            <brief>
  Boolean value that indicates whether a content item is marked as a favorite.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
    </Interface>
    <Interface name="VideoContent" id="::Content::VideoContent">
      <webidl>  [NoInterfaceObject] interface VideoContent : <ref>Content</ref> {

    attribute <ref>SimpleCoordinates</ref>? geolocation;

    readonly attribute DOMString? album;

    readonly attribute DOMString[]? artists;

    readonly attribute unsigned long duration;

    readonly attribute unsigned long width;

    readonly attribute unsigned long height;

  };</webidl>
      <descriptive>
          <brief>
 The VideoContent interface extends a basic <em>Content </em>object with video-specific attributes.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="Content"/>
      </InterfaceInheritance>
      <Attribute name="geolocation" id="::Content::VideoContent::geolocation">
        <webidl>    attribute <ref>SimpleCoordinates</ref>? geolocation;</webidl>
        <descriptive>
            <brief>
 The geographical location where the video has been made.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="SimpleCoordinates" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="album" id="::Content::VideoContent::album">
        <webidl>    readonly attribute DOMString? album;</webidl>
        <descriptive>
            <brief>
 The album name to which the video belongs.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="artists" id="::Content::VideoContent::artists">
        <webidl>    readonly attribute DOMString[]? artists;</webidl>
        <descriptive>
            <brief>
 The list of artists who created the video.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array" nullable="nullable">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="duration" id="::Content::VideoContent::duration">
        <webidl>    readonly attribute unsigned long duration;</webidl>
        <descriptive>
            <brief>
 The video duration in milliseconds.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute readonly="readonly" name="width" id="::Content::VideoContent::width">
        <webidl>    readonly attribute unsigned long width;</webidl>
        <descriptive>
            <brief>
 The width of a video in pixels.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute readonly="readonly" name="height" id="::Content::VideoContent::height">
        <webidl>    readonly attribute unsigned long height;</webidl>
        <descriptive>
            <brief>
 The height of the video in pixels.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
    </Interface>
    <Interface name="AudioContentLyrics" id="::Content::AudioContentLyrics">
      <webidl>  [NoInterfaceObject] interface AudioContentLyrics {

    readonly attribute <ref>AudioContentLyricsType</ref> type;

    readonly attribute unsigned long[] timestamps;

    readonly attribute DOMString[] texts;
  };</webidl>
      <descriptive>
          <brief>
 The AudioContentLyrics interface provides lyrics for music.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="type" id="::Content::AudioContentLyrics::type">
        <webidl>    readonly attribute <ref>AudioContentLyricsType</ref> type;</webidl>
        <descriptive>
            <brief>
 The type of lyrics, that is, whether they are synchronized with the music.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="AudioContentLyricsType"/>
      </Attribute>
      <Attribute readonly="readonly" name="timestamps" id="::Content::AudioContentLyrics::timestamps">
        <webidl>    readonly attribute unsigned long[] timestamps;</webidl>
        <descriptive>
            <brief>
 The array of timestamps in milliseconds for lyrics.
            </brief>
           <description>
            <p>
If the lyrics are not synchronized (if there is no time information for the lyrics) the array is undefined.
            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array">
          <Type type="unsigned long"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="texts" id="::Content::AudioContentLyrics::texts">
        <webidl>    readonly attribute DOMString[] texts;</webidl>
        <descriptive>
            <brief>
 The array of lyrics snippets.
            </brief>
           <description>
            <p>
If the lyrics are not synchronized, the array has only one member with full lyrics.
            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
    </Interface>
    <Interface name="AudioContent" id="::Content::AudioContent">
      <webidl>  [NoInterfaceObject] interface AudioContent : <ref>Content</ref> {

    readonly attribute DOMString? album;

    readonly attribute DOMString[]? genres;

    readonly attribute DOMString[]? artists;

    readonly attribute DOMString[]? composers;

    readonly attribute <ref>AudioContentLyrics</ref>? lyrics;

    readonly attribute DOMString? copyright;

    readonly attribute unsigned long bitrate;

    readonly attribute unsigned short? trackNumber;

    readonly attribute unsigned long duration;

  };</webidl>
      <descriptive>
          <brief>
 The AudioContent interface extends a basic <em>Content </em>object with audio-specific attributes.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="Content"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="album" id="::Content::AudioContent::album">
        <webidl>    readonly attribute DOMString? album;</webidl>
        <descriptive>
            <brief>
 The album name to which the audio belongs.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="genres" id="::Content::AudioContent::genres">
        <webidl>    readonly attribute DOMString[]? genres;</webidl>
        <descriptive>
            <brief>
 The list of genres to which the audio belongs.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array" nullable="nullable">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="artists" id="::Content::AudioContent::artists">
        <webidl>    readonly attribute DOMString[]? artists;</webidl>
        <descriptive>
            <brief>
 The list of artists who created the audio.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array" nullable="nullable">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="composers" id="::Content::AudioContent::composers">
        <webidl>    readonly attribute DOMString[]? composers;</webidl>
        <descriptive>
            <brief>
 The list of composers for the music.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="array" nullable="nullable">
          <Type type="DOMString"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="lyrics" id="::Content::AudioContent::lyrics">
        <webidl>    readonly attribute <ref>AudioContentLyrics</ref>? lyrics;</webidl>
        <descriptive>
            <brief>
 The lyrics of a song in an audio file.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="AudioContentLyrics" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="copyright" id="::Content::AudioContent::copyright">
        <webidl>    readonly attribute DOMString? copyright;</webidl>
        <descriptive>
            <brief>
 The copyright information.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="bitrate" id="::Content::AudioContent::bitrate">
        <webidl>    readonly attribute unsigned long bitrate;</webidl>
        <descriptive>
            <brief>
 The audio bitrate in bits per second. By default, this value is 0.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute readonly="readonly" name="trackNumber" id="::Content::AudioContent::trackNumber">
        <webidl>    readonly attribute unsigned short? trackNumber;</webidl>
        <descriptive>
            <brief>
 The track number if the audio belongs to an album.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="duration" id="::Content::AudioContent::duration">
        <webidl>    readonly attribute unsigned long duration;</webidl>
        <descriptive>
            <brief>
 The audio duration in milliseconds.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
    </Interface>
    <Interface name="ImageContent" id="::Content::ImageContent">
      <webidl>  [NoInterfaceObject] interface ImageContent : <ref>Content</ref> {

    attribute <ref>SimpleCoordinates</ref>? geolocation;

    readonly attribute unsigned long width;

    readonly attribute unsigned long height;

    attribute <ref>ImageContentOrientation</ref> orientation;
  };</webidl>
      <descriptive>
          <brief>
 The ImageContent interface extends a basic <em>Content </em>object with image-specific attributes.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="Content"/>
      </InterfaceInheritance>
      <Attribute name="geolocation" id="::Content::ImageContent::geolocation">
        <webidl>    attribute <ref>SimpleCoordinates</ref>? geolocation;</webidl>
        <descriptive>
            <brief>
 The geographical location where the image has been made.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="SimpleCoordinates" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="width" id="::Content::ImageContent::width">
        <webidl>    readonly attribute unsigned long width;</webidl>
        <descriptive>
            <brief>
 The width of an image in pixels.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute readonly="readonly" name="height" id="::Content::ImageContent::height">
        <webidl>    readonly attribute unsigned long height;</webidl>
        <descriptive>
            <brief>
 The height of an image in pixels.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute name="orientation" id="::Content::ImageContent::orientation">
        <webidl>    attribute <ref>ImageContentOrientation</ref> orientation;</webidl>
        <descriptive>
            <brief>
 The image orientation.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="ImageContentOrientation"/>
      </Attribute>
    </Interface>
    <Interface name="PlaylistItem" id="::Content::PlaylistItem">
      <webidl>  [NoInterfaceObject]
  interface PlaylistItem {
    readonly attribute <ref>Content</ref> content;
  };</webidl>
      <descriptive>
          <brief>
 The PlaylistItem interface represents a playlist item.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="content" id="::Content::PlaylistItem::content">
        <webidl>    readonly attribute <ref>Content</ref> content;</webidl>
        <descriptive>
            <brief>
 Content contained in this playlist item.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="Content"/>
      </Attribute>
    </Interface>
    <Interface name="Playlist" id="::Content::Playlist">
      <webidl>  [NoInterfaceObject]
  interface Playlist {
    readonly attribute <ref>PlaylistId</ref> id;

    attribute DOMString name raises(<ref>WebAPIException</ref>);

    readonly attribute long numberOfTracks;

    attribute DOMString? thumbnailURI raises(<ref>WebAPIException</ref>);

    void add(<ref>Content</ref> item) raises(<ref>WebAPIException</ref>);

    void addBatch(<ref>Content</ref>[] items,
                  optional <ref>SuccessCallback</ref>? successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void remove(<ref>PlaylistItem</ref> item) raises(<ref>WebAPIException</ref>);

    void removeBatch(<ref>PlaylistItem</ref>[] items,
                     optional <ref>SuccessCallback</ref>? successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void get(<ref>PlaylistItemArraySuccessCallback</ref> successCallback,
             optional <ref>ErrorCallback</ref>? errorCallback,
             optional long? count,
             optional long? offset) raises(<ref>WebAPIException</ref>);

    void setOrder(<ref>PlaylistItem</ref>[] items,
            optional <ref>SuccessCallback</ref>? successCallback,
            optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void move(<ref>PlaylistItem</ref> item,
              long delta,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The Playlist interface represents a playlist.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="id" id="::Content::Playlist::id">
        <webidl>    readonly attribute <ref>PlaylistId</ref> id;</webidl>
        <descriptive>
            <brief>
 Identifier of a playlist.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="PlaylistId"/>
      </Attribute>
      <Attribute name="name" id="::Content::Playlist::name">
        <webidl>    attribute DOMString name raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Name of a playlist (case sensitive and unique).
            </brief>
           <description>
            <p>
When <var>name</var> is set, the change is recorded in the database.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError, when assigning an invalid value (e.g. playlist of the same name already exists).
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to change this attribute.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="numberOfTracks" id="::Content::Playlist::numberOfTracks">
        <webidl>    readonly attribute long numberOfTracks;</webidl>
        <descriptive>
            <brief>
 Number of playlist items in the playlist.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute name="thumbnailURI" id="::Content::Playlist::thumbnailURI">
        <webidl>    attribute DOMString? thumbnailURI raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Thumbnail URI of a playlist.
            </brief>
           <description>
            <p>
By default, this attribute is set to <var>null</var>. <br/>When <var>thumbnailURI</var> is set, the change is recorded in the database.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError, when assigning an invalid value (e.g. if the URI does not start with &quot;file:///&quot;).
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to change this attribute.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Operation name="add" id="::Content::Playlist::add">
        <webidl>    void add(<ref>Content</ref> item) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds a content item to a playlist.
            </brief>
           <description>
            <p>
See code example for the <em>createPlaylist()</em> method.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="item">
            <descriptive>
                <description><p>
 Content to add
                </p></description>
            </descriptive>
            <Type name="Content"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="addBatch" id="::Content::Playlist::addBatch">
        <webidl>    void addBatch(<ref>Content</ref>[] items,
                  optional <ref>SuccessCallback</ref>? successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds tracks to a playlist as a batch, asynchronously.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
UnknownError: In case of any error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="items">
            <descriptive>
                <description><p>
 List of tracks (Content objects) to add
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="Content"/>
            </Type>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when adding a list of content items to a playlist completes successfully
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="remove" id="::Content::Playlist::remove">
        <webidl>    void remove(<ref>PlaylistItem</ref> item) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes a track from a playlist.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <Code> var gPlaylists, gItems, gCurPlaylist;

 function get2Fail(err) {
     console.log(&quot;get items (after remove) failed: &quot; + err);
 }

 function get2Success(items) {
    console.log(&quot;Playlist items:&quot;);
    for(var i = 0; i &#60; items.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + items[i].content.name);
    }
 }

 function getSuccess(items) {
    gItems = items;

    if(gItems.length &#60; 1) {
        console.log(&quot;Please add at least 1 tracks to playlist!&quot;);
        return;
    }

    console.log(&quot;Original playlist:&quot;);
    for(var i = 0; i &#60; gItems.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + gItems[i].content.name);
    }

    console.log(&quot;Will remove item at index [0] name:&quot; + gItems[0].content.name);
    gCurPlaylist.remove(gItems[0]);
    gCurPlaylist.get(get2Success, get2Fail);
 }

 function getFail(err) {
     console.log(&quot;get items failed: &quot; + err);
 }

 function getPlaylistsFail(err) {
     console.log(&quot;getPlaylists failed: &quot; + err);
 }

 function getPlaylistsSuccess(playlists) {
     gPlaylists = playlists;
     if(gPlaylists.length === 0) {
         console.log(&quot;Please create at least 1 playlist!&quot;);
         return;
     }

     gCurPlaylist = gPlaylists[0];
     gCurPlaylist.get(getSuccess, getFail);
 }

 tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="item">
            <descriptive>
                <description><p>
 Playlist item to remove
                </p></description>
            </descriptive>
            <Type name="PlaylistItem"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removeBatch" id="::Content::Playlist::removeBatch">
        <webidl>    void removeBatch(<ref>PlaylistItem</ref>[] items,
                     optional <ref>SuccessCallback</ref>? successCallback,
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes tracks from a playlist as a batch, asynchronously.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
UnknownError: In case of any other error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <Code> var gPlaylists, gItems, gCurPlaylist;

 function get2Fail(err) {
     console.log(&quot;get items (after remove batch) failed: &quot; + err);
 }

 function get2Success(items) {
    console.log(&quot;Playlist after remove batch:&quot;);
    for(var i = 0; i &#60; items.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + items[i].content.name);
    }
 }

 function removeBatchSuccess() {
     console.log(&quot;removeBatch success&quot;);
     gCurPlaylist.get(get2Success, get2Fail);
 }

 function removeBatchFail(err) {
     console.log(&quot;removeBatch failed: &quot; + err);
 }

 function getSuccess(items) {
    gItems = items;

    if(gItems.length &#60; 4) {
        console.log(&quot;Please add at least 4 tracks to playlist!&quot;);
        return;
    }

    console.log(&quot;Original playlist:&quot;);
    for(var i = 0; i &#60; gItems.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + gItems[i].content.name);
    }

    console.log(&quot;Will remove items at index [0](name:&quot; + gItems[0].content.name
            + &quot;) and at index [2](name:&quot; + gItems[2].content.name + &quot;)&quot;);
    gCurPlaylist.removeBatch([gItems[2], gItems[0]],
            removeBatchSuccess, removeBatchFail);
 }

 function getFail(err) {
     console.log(&quot;get items failed: &quot; + err);
 }

 function getPlaylistsFail(err) {
     console.log(&quot;getPlaylists failed: &quot; + err);
 }

 function getPlaylistsSuccess(playlists) {
     gPlaylists = playlists;
     if(gPlaylists.length === 0) {
         console.log(&quot;Please create at least 1 playlist!&quot;);
         return;
     }

     gCurPlaylist = gPlaylists[0];
     gCurPlaylist.get(getSuccess, getFail);
 }

 tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="items">
            <descriptive>
                <description><p>
 List of tracks to remove
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="PlaylistItem"/>
            </Type>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when removing a list of content items from a playlist completes successfully
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="get" id="::Content::Playlist::get">
        <webidl>    void get(<ref>PlaylistItemArraySuccessCallback</ref> successCallback,
             optional <ref>ErrorCallback</ref>? errorCallback,
             optional long? count,
             optional long? offset) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets playlist items from a playlist.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError: If any of the input parameters contain an invalid value (e.g <em>count</em> or <em>offset</em> is a negative number)              </li>
              <li>
UnknownError: In case of any error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.read
            </privilege>
            <Code> var gPlaylists, gItems, gCurPlaylist;

 function getSuccess(items) {
     gItems = items;
     console.log(&quot;Playlist items:&quot;);
     for(var i = 0; i &#60; items.length ; ++i) {
         console.log(&quot;[&quot; + i + &quot;]: name:&quot; + items[i].name);
     }
 }

 function getFail(err) {
     console.log(&quot;get items failed: &quot; + err);
 }

 function getPlaylistsFail(err) {
     console.log(&quot;getPlaylists failed: &quot; + err);
 }

 function getPlaylistsSuccess(playlists) {
     gPlaylists = playlists;
     if(gPlaylists.length === 0) {
         console.log(&quot;Please create at least 1 playlist!&quot;);
         return;
     }

     gCurPlaylist = gPlaylists[0];
     // To retrieves all playlist items of 'gCurPlaylist' playlist.
     gCurPlaylist.get(getSuccess, getFail);
 }

 tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked for a list of tracks in the playlist
                </p></description>
            </descriptive>
            <Type name="PlaylistItemArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="count">
            <descriptive>
                <description><p>
 Number of playlist items to return <br/>If the <var>count</var> is not passed, all playlist items are retrieved.
                </p></description>
            </descriptive>
            <Type type="long" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="offset">
            <descriptive>
                <description><p>
 Offset of the track from the beginning of the playlist <br/>The default value is <em>0</em> <br/>It means no offset.
                </p></description>
            </descriptive>
            <Type type="long" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setOrder" id="::Content::Playlist::setOrder">
        <webidl>    void setOrder(<ref>PlaylistItem</ref>[] items,
            optional <ref>SuccessCallback</ref>? successCallback,
            optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Changes the play order of all playlist items in the playlist.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError: In case the item in the passed <em>items</em> array is not inside this playlist, or the <em>items</em> array does not contain all items from the playlist              </li>
              <li>
UnknownError: In case of any other error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <Code> var gPlaylists, gItems, gCurPlaylist, gExpectedOrder;

 function get2Fail(err) {
     console.log(&quot;get items (after set order) failed: &quot; + err);
 }

 function get2Success(items) {
    console.log(&quot;Playlist order after setOrder:&quot;);
    for(var i = 0; i &#60; items.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + items[i].content.name);
    }
 }

 function setOrderSuccess() {
     console.log(&quot;set items order SUCCESS&quot;);
     gCurPlaylist.get(get2Success, get2Fail);
 }

 function setOrderFail(err) {
     console.log(&quot;set items order failed: &quot; + err);
 }

 function getSuccess(items) {
    gItems = items;

    if(gItems.length &#60; 2) {
        console.log(&quot;Please add at least 2 tracks to playlist!&quot;);
        return;
    }

    console.log(&quot;Original order:&quot;);
    for(var i = 0; i &#60; gItems.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + gItems[i].content.name);
    }

    gExpectedOrder = gItems.slice(0);
    gExpectedOrder.reverse();

    console.log(&quot;New order:&quot;);
    for(var i = 0; i &#60; gExpectedOrder.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + gExpectedOrder[i].content.name);
    }

    gCurPlaylist.setOrder(gExpectedOrder, setOrderSuccess, setOrderFail);
 }

 function getFail(err) {
     console.log(&quot;get items failed: &quot; + err);
 }

 function getPlaylistsFail(err) {
     console.log(&quot;getPlaylists failed: &quot; + err);
 }

 function getPlaylistsSuccess(playlists) {
     gPlaylists = playlists;
     if(gPlaylists.length === 0) {
         console.log(&quot;Please create at least 1 playlist!&quot;);
         return;
     }

     gCurPlaylist = gPlaylists[0];
     gCurPlaylist.get(getSuccess, getFail);
 }

 tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="items">
            <descriptive>
                <description><p>
 List of playlist items to set in play order <br/>This list must include all playlist items of this playlist <br/>If not, InvalidValuesError is thrown.
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="PlaylistItem"/>
            </Type>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when changing the positions of items in the playlist is successfully completed
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="move" id="::Content::Playlist::move">
        <webidl>    void move(<ref>PlaylistItem</ref> item,
              long delta,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Moves the specified item up or down a specified amount in the play order.
            </brief>
           <description>
            <p>
If <var>current index + delta</var> is:
            </p>
            <ul>
              <li>
<var>&#60; 0</var> then the item is moved to the first position in the playlist              </li>
              <li>
<var>&#8805; number of tracks</var> then the item is moved to the last position in the playlist              </li>
            </ul>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError: In case the item in the passed <em>items</em> array is not inside this playlist or some item of this playlist is not included in <em>items</em>              </li>
              <li>
UnknownError: In case of any other error              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/content.write
            </privilege>
            <Code> var gPlaylists, gItems, gCurPlaylist;

 function get2Fail(err) {
     console.log(&quot;get items (after move item) failed: &quot; + err);
 }

 function get2Success(items) {
    console.log(&quot;Playlist order after move:&quot;);
    for(var i = 0; i &#60; items.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + items[i].content.name);
    }
 }

 function moveSuccess() {
     console.log(&quot;move item SUCCESS&quot;);
     gCurPlaylist.get(get2Success, get2Fail);
 }

 function moveFail(err) {
     console.log(&quot;move item failed: &quot; + err);
 }

 function getSuccess(items) {
    gItems = items;

    if(gItems.length &#60; 2) {
        console.log(&quot;Please add at least 2 tracks to playlist!&quot;);
        return;
    }

    console.log(&quot;Original order:&quot;);
    for(var i = 0; i &#60; gItems.length ; ++i) {
        console.log(&quot;[&quot; + i + &quot;]: name:&quot; + gItems[i].content.name);
    }

    console.log(&quot;Will move item at index [1] (name: &quot; +
            gItems[1].content.name + &quot;) up by one place (to [0])&quot;);

    gCurPlaylist.move(gItems[1], -1, moveSuccess, moveFail);
    gItems.unshift(gItems.splice(1, 1)[0]);
 }

 function getFail(err) {
     console.log(&quot;get items failed: &quot; + err);
 }

 function getPlaylistsFail(err) {
     console.log(&quot;getPlaylists failed: &quot; + err);
 }

 function getPlaylistsSuccess(playlists) {
     gPlaylists = playlists;
     if(gPlaylists.length === 0) {
         console.log(&quot;Please create at least 1 playlist!&quot;);
         return;
     }

     gCurPlaylist = gPlaylists[0];
     gCurPlaylist.get(getSuccess, getFail);
 }

 tizen.content.getPlaylists(getPlaylistsSuccess, getPlaylistsFail);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="item">
            <descriptive>
                <description><p>
 Playlist item to move
                </p></description>
            </descriptive>
            <Type name="PlaylistItem"/>
          </Argument>
          <Argument name="delta">
            <descriptive>
                <description><p>
 How many positions to move the item, negative value means move up, positive means move down
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when the playlist item has successfully been moved
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="PlaylistArraySuccessCallback" id="::Content::PlaylistArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface PlaylistArraySuccessCallback {
    void onsuccess(<ref>Playlist</ref>[] playlists);
  };</webidl>
      <descriptive>
          <brief>
 The PlaylistArraySuccessCallback interface specifies a success callback that is invoked when all existing playlists are retrieved successfully.
          </brief>
         <description>
          <p>
It is used in <em>tizen.content.getPlaylists()</em>.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Content::PlaylistArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>Playlist</ref>[] playlists);</webidl>
        <descriptive>
            <brief>
 Called when the <em>tizen.content.getPlaylists()</em> method completes successfully.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="playlists">
            <descriptive>
                <description><p>
 List of all playlists on a device
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="Playlist"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="PlaylistSuccessCallback" id="::Content::PlaylistSuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface PlaylistSuccessCallback {
    void onsuccess(<ref>Playlist</ref> playlist);
  };</webidl>
      <descriptive>
          <brief>
 The PlaylistSuccessCallback interface specifies a success callback that is invoked when a new playlist is successfully created.
          </brief>
         <description>
          <p>
It is used in <em>tizen.content.createPlaylist()</em>.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Content::PlaylistSuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>Playlist</ref> playlist);</webidl>
        <descriptive>
            <brief>
 Called when the <em>tizen.content.createPlaylist()</em> method completes successfully.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="playlist">
            <descriptive>
                <description><p>
 Newly created playlist
                </p></description>
            </descriptive>
            <Type name="Playlist"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="PlaylistItemArraySuccessCallback" id="::Content::PlaylistItemArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface PlaylistItemArraySuccessCallback {
    void onsuccess(<ref>PlaylistItem</ref>[] items);
  };</webidl>
      <descriptive>
          <brief>
 The PlaylistItemArraySuccessCallback interface specifies a success callback that is invoked when a list of playlist items are successfully retrieved.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Content::PlaylistItemArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>PlaylistItem</ref>[] items);</webidl>
        <descriptive>
            <brief>
 Called when the <em>playlist.get()</em> method completes successfully.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="items">
            <descriptive>
                <description><p>
 List of playlist items
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="PlaylistItem"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="Download" id="::Download">
    <webidl>module Download {
    typedef object DownloadHTTPHeaderFields;

    enum DownloadState { &quot;QUEUED&quot;, &quot;DOWNLOADING&quot;, &quot;PAUSED&quot;, &quot;CANCELED&quot;, &quot;COMPLETED&quot;, &quot;FAILED&quot; };

    enum DownloadNetworkType { &quot;CELLULAR&quot;, &quot;WIFI&quot;, &quot;ALL&quot; };

    [NoInterfaceObject] interface DownloadManagerObject {
        readonly attribute <ref>DownloadManager</ref> download;
    };
    <ref>Tizen</ref> implements <ref>DownloadManagerObject</ref>;

    [Constructor(DOMString url, optional DOMString? destination, optional DOMString? fileName, optional <ref>DownloadNetworkType</ref>? networkType, optional <ref>DownloadHTTPHeaderFields</ref>? httpHeader)]
    interface DownloadRequest {
        attribute DOMString url;

        attribute DOMString? destination;

        attribute DOMString? fileName;

        attribute <ref>DownloadNetworkType</ref>? networkType;

        attribute <ref>DownloadHTTPHeaderFields</ref>? httpHeader;
    };

   [NoInterfaceObject] interface DownloadManager {
       long start(<ref>DownloadRequest</ref> downloadRequest,
                    optional <ref>DownloadCallback</ref>? downloadCallback) raises(<ref>WebAPIException</ref>);

       void cancel(long downloadId) raises(<ref>WebAPIException</ref>);

       void pause(long downloadId) raises(<ref>WebAPIException</ref>);

       void resume(long downloadId) raises(<ref>WebAPIException</ref>);

       <ref>DownloadState</ref> getState(long downloadId) raises(<ref>WebAPIException</ref>);

       <ref>DownloadRequest</ref> getDownloadRequest(long downloadId) raises(<ref>WebAPIException</ref>);

       DOMString getMIMEType(long downloadId) raises(<ref>WebAPIException</ref>);

       void setListener(long downloadId, <ref>DownloadCallback</ref> downloadCallback) raises(<ref>WebAPIException</ref>);
   };

   [Callback, NoInterfaceObject] interface DownloadCallback {
       void onprogress(long downloadId, unsigned long long receivedSize, unsigned long long totalSize);

       void onpaused(long downloadId);

       void oncanceled(long downloadId);

       void oncompleted(long downloadId, DOMString fullPath);

       void onfailed(long downloadId, <ref>WebAPIError</ref> error);
   };
};</webidl>
    <descriptive>
        <brief>
 This API provides methods to asynchronously download the contents of a URL to a storage.
        </brief>
       <description>
        <p>
For more information on the Download features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/content_guide/download.htm">Download Guide</a>.
        </p>
       </description>
        <version>
 2.0
        </version>
        <def-api-feature identifier="http://tizen.org/feature/network.wifi">
          <descriptive>
           <description>
            <p>
DownloadNetworkType <em>'WIFI'</em> can be available on a Wi-Fi enabled device. To guarantee that the download application runs on a device with the Wi-Fi feature, declare the following feature requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
        <def-api-feature identifier="http://tizen.org/feature/network.telephony">
          <descriptive>
           <description>
            <p>
DownloadNetworkType <em>'CELLULAR'</em> can be available on a cellular-enabled device. To guarantee that the download application runs on a device with the cellular feature, declare the following feature requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
    </descriptive>
    <Typedef name="DownloadHTTPHeaderFields" id="::Download::DownloadHTTPHeaderFields">
      <webidl>    typedef object DownloadHTTPHeaderFields;</webidl>
      <descriptive>
          <brief>
 A set of HTTP header fields.
          </brief>
         <description>
          <p>
The key / value type of each HTTP header field should be DOMString.
          </p>
         </description>
          <version>
 2.1
          </version>
      </descriptive>
      <Type type="object"/>
    </Typedef>
    <Enum name="DownloadState" id="::Download::DownloadState">
      <webidl>    enum DownloadState { &quot;QUEUED&quot;, &quot;DOWNLOADING&quot;, &quot;PAUSED&quot;, &quot;CANCELED&quot;, &quot;COMPLETED&quot;, &quot;FAILED&quot; };</webidl>
      <descriptive>
          <brief>
 An enumerator to indicate the state of a download operation.
          </brief>
         <description>
          <p>
The following values are supported:
          </p>
          <ul>
            <li>
QUEUED - Indicates that the download operation is listed in a queue.            </li>
            <li>
DOWNLOADING - Indicates that the download operation is in progress.            </li>
            <li>
PAUSED - Indicates that the download operation is in a paused state by user request.            </li>
            <li>
CANCELED - Indicates that the download operation is canceled by user request.            </li>
            <li>
COMPLETED - Indicates that the download operation is in a completed state.            </li>
            <li>
FAILED - Indicates that the download operation has failed due to some reasons.            </li>
          </ul>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <EnumValue stringvalue="QUEUED">
        <webidl> &quot;QUEUED</webidl>
      </EnumValue>
      <EnumValue stringvalue="DOWNLOADING">
        <webidl> &quot;DOWNLOADING</webidl>
      </EnumValue>
      <EnumValue stringvalue="PAUSED">
        <webidl> &quot;PAUSED</webidl>
      </EnumValue>
      <EnumValue stringvalue="CANCELED">
        <webidl> &quot;CANCELED</webidl>
      </EnumValue>
      <EnumValue stringvalue="COMPLETED">
        <webidl> &quot;COMPLETED</webidl>
      </EnumValue>
      <EnumValue stringvalue="FAILED">
        <webidl> &quot;FAILED</webidl>
      </EnumValue>
    </Enum>
    <Enum name="DownloadNetworkType" id="::Download::DownloadNetworkType">
      <webidl>    enum DownloadNetworkType { &quot;CELLULAR&quot;, &quot;WIFI&quot;, &quot;ALL&quot; };</webidl>
      <descriptive>
          <brief>
 An enumerator to indicate the network type.
          </brief>
         <description>
          <p>
The following values are supported:
          </p>
          <ul>
            <li>
CELLULAR - Indicates that the download operation is allowed in the cellular network only.            </li>
            <li>
WIFI - Indicates that the download operation is allowed in the Wi-Fi network only.            </li>
            <li>
ALL - Indicates that the download operation is allowed in all network types.            </li>
          </ul>
         </description>
          <version>
 2.1
          </version>
      </descriptive>
      <EnumValue stringvalue="CELLULAR">
        <webidl> &quot;CELLULAR</webidl>
      </EnumValue>
      <EnumValue stringvalue="WIFI">
        <webidl> &quot;WIFI</webidl>
      </EnumValue>
      <EnumValue stringvalue="ALL">
        <webidl> &quot;ALL</webidl>
      </EnumValue>
    </Enum>
    <Interface name="DownloadManagerObject" id="::Download::DownloadManagerObject">
      <webidl>    [NoInterfaceObject] interface DownloadManagerObject {
        readonly attribute <ref>DownloadManager</ref> download;
    };</webidl>
      <descriptive>
          <brief>
 This interface defines the default download manager that is instantiated by the <em>Tizen </em>object.
The <em>tizen.download </em>object allows access to the functionality of the Download API.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="download" id="::Download::DownloadManagerObject::download">
        <webidl>        readonly attribute <ref>DownloadManager</ref> download;</webidl>
        <Type name="DownloadManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="DownloadManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>DownloadManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="DownloadRequest" id="::Download::DownloadRequest">
      <webidl>    [Constructor(DOMString url, optional DOMString? destination, optional DOMString? fileName, optional <ref>DownloadNetworkType</ref>? networkType, optional <ref>DownloadHTTPHeaderFields</ref>? httpHeader)]
    interface DownloadRequest {
        attribute DOMString url;

        attribute DOMString? destination;

        attribute DOMString? fileName;

        attribute <ref>DownloadNetworkType</ref>? networkType;

        attribute <ref>DownloadHTTPHeaderFields</ref>? httpHeader;
    };</webidl>
      <descriptive>
          <brief>
 The DownloadRequest interface defines the download request object.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(DOMString url, optional DOMString? destination, optional DOMString? fileName, optional <ref>DownloadNetworkType</ref>? networkType, optional <ref>DownloadHTTPHeaderFields</ref>? httpHeader)</webidl>
          <ArgumentList>
            <Argument name="url">
              <Type type="DOMString"/>
            </Argument>
            <Argument optional="optional" name="destination">
              <Type type="DOMString" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="fileName">
              <Type type="DOMString" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="networkType">
              <Type name="DownloadNetworkType" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="httpHeader">
              <Type name="DownloadHTTPHeaderFields" nullable="nullable"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute name="url" id="::Download::DownloadRequest::url">
        <webidl>        attribute DOMString url;</webidl>
        <descriptive>
            <brief>
 An attribute to store the URL of the object to download.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute name="destination" id="::Download::DownloadRequest::destination">
        <webidl>        attribute DOMString? destination;</webidl>
        <descriptive>
            <brief>
 An attribute to store the folder path of the destination folder to which a requested file object will be downloaded.
            </brief>
           <description>
            <p>
If the destination is not specified or is an empty string, the file will be downloaded to the default storage: &quot;Downloads&quot;. For more information, see <a href="filesystem.html">Filesystem API</a>.
            </p>
            <p>
The default value is an empty string.
            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="fileName" id="::Download::DownloadRequest::fileName">
        <webidl>        attribute DOMString? fileName;</webidl>
        <descriptive>
            <brief>
 An attribute to store the file name for the specified URL.
            </brief>
           <description>
            <p>
If the file name is not given or is an empty string, the original file name from the URL is used.
            </p>
            <p>
The default value is an empty string.
            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="networkType" id="::Download::DownloadRequest::networkType">
        <webidl>        attribute <ref>DownloadNetworkType</ref>? networkType;</webidl>
        <descriptive>
            <brief>
 An attribute to store the allowed network type.
            </brief>
           <description>
            <p>
If the network type is not given, all network types are allowed.
            </p>
            <p>
The default value is <var>ALL</var>.
            </p>
           </description>
            <version>
 2.1
            </version>
        </descriptive>
        <Type name="DownloadNetworkType" nullable="nullable"/>
      </Attribute>
      <Attribute name="httpHeader" id="::Download::DownloadRequest::httpHeader">
        <webidl>        attribute <ref>DownloadHTTPHeaderFields</ref>? httpHeader;</webidl>
        <descriptive>
            <brief>
 An attribute to store extra HTTP header fields.
            </brief>
           <description>
            <p>
For more information about HTTP header fields, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2">RFC-2616</a>            </p>
            <p>
The default value is an empty object.
            </p>
           </description>
            <Code> var req = new tizen.DownloadRequest(&quot;http://download.tizen.org/tools/README.txt&quot;);
 req.httpHeader[&quot;Pragma&quot;] = &quot;no-cache&quot;;
 req.httpHeader[&quot;Cookie&quot;] = &quot;version=1; Skin=new&quot;;
 req.httpHeader[&quot;X-Agent&quot;] = &quot;Tizen Sample App&quot;;
 </Code>
            <version>
 2.1
            </version>
        </descriptive>
        <Type name="DownloadHTTPHeaderFields" nullable="nullable"/>
      </Attribute>
    </Interface>
    <Interface name="DownloadManager" id="::Download::DownloadManager">
      <webidl>   [NoInterfaceObject] interface DownloadManager {
       long start(<ref>DownloadRequest</ref> downloadRequest,
                    optional <ref>DownloadCallback</ref>? downloadCallback) raises(<ref>WebAPIException</ref>);

       void cancel(long downloadId) raises(<ref>WebAPIException</ref>);

       void pause(long downloadId) raises(<ref>WebAPIException</ref>);

       void resume(long downloadId) raises(<ref>WebAPIException</ref>);

       <ref>DownloadState</ref> getState(long downloadId) raises(<ref>WebAPIException</ref>);

       <ref>DownloadRequest</ref> getDownloadRequest(long downloadId) raises(<ref>WebAPIException</ref>);

       DOMString getMIMEType(long downloadId) raises(<ref>WebAPIException</ref>);

       void setListener(long downloadId, <ref>DownloadCallback</ref> downloadCallback) raises(<ref>WebAPIException</ref>);
   };</webidl>
      <descriptive>
          <brief>
 The DownloadManager interface handles requests for downloading. Each step of a download operation is informed through callbacks.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="start" id="::Download::DownloadManager::start">
        <webidl>       long start(<ref>DownloadRequest</ref> downloadRequest,
                    optional <ref>DownloadCallback</ref>? downloadCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Starts a download operation with the specified URL information.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/download
            </privilege>
            <remark>
 To check if <var>CELLULAR</var> type is supported, use <var>tizen.systeminfo.getCapability(&quot;http://tizen.org/feature/network.telephony&quot;)</var>            </remark>
            <remark>
 To check if <var>WIFI</var> type is supported, use <var>tizen.systeminfo.getCapability(&quot;http://tizen.org/feature/network.wifi&quot;)</var>            </remark>
            <Code> // Check if Download API is supported not on a device.
 var download_api_capability = tizen.systeminfo.getCapability(&quot;http://tizen.org/feature/download&quot;);
 if (download_api_capability === false) {
     console.log(&quot;Download API is not supported on this device.&quot;);
     return;
 }

 var listener = {
   onprogress: function(id, receivedSize, totalSize) {
     console.log('Received with id: ' + id + ', ' + receivedSize + '/' + totalSize);
   },
   onpaused: function(id) {
     console.log('Paused with id: ' + id);
   },
   oncanceled: function(id) {
     console.log('Canceled with id: ' + id);
   },
   oncompleted: function(id, fullPath) {
     console.log('Completed with id: ' + id + ', full path: ' + fullPath);
   },
   onfailed: function(id, error) {
     console.log('Failed with id: ' + id + ', error name: ' + error.name);
   }
 };

 // Starts downloading the file from the Web with the corresponding callbacks.
 var downloadRequest = new tizen.DownloadRequest(&quot;http://download.tizen.org/tools/README.txt&quot;, &quot;documents&quot;);
 var downloadId = tizen.download.start(downloadRequest, listener);

 // If you want to download a large file through Wi-Fi,
 var wifi_capability = tizen.systeminfo.getCapability(&quot;http://tizen.org/feature/network.wifi&quot;);
 var wifiDownloadRequest = new tizen.DownloadRequest(&quot;http://download.tizen.org/tools/archive/14.02.2/Ubuntu_12.04/qemu_1.6.0rc3.orig.tar.gz&quot;, &quot;downloads&quot;, null, &quot;WIFI&quot;);

 if (wifi_capability === true) {
     var downlodId_wifi = tizen.download.start(wifiDownloadRequest, listener);
 } else {
     // If you call tizen.download.start(), NotSupportedError will be thrown.
     console.log(&quot;This device doesn't support Download API through Wi-Fi.&quot;);
 }

 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long An identifier for each download operation.
If the network is not available for downloading, the return value is -1 since Tizen 2.3.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="downloadRequest">
            <descriptive>
                <description><p>
 The URL and destination information of the object to download.
                </p></description>
            </descriptive>
            <Type name="DownloadRequest"/>
          </Argument>
          <Argument optional="optional" name="downloadCallback">
            <descriptive>
                <description><p>
 The method to invoke when the download state changes or an error occurs.
                </p></description>
            </descriptive>
            <Type name="DownloadCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type NotSupportedError, if the <em>networkType</em> of the given <var>DownloadRequest</var> is not supported on a device.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="cancel" id="::Download::DownloadManager::cancel">
        <webidl>       void cancel(long downloadId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Cancels an ongoing download operation that is specified by the <em>downloadId</em> parameter.
            </brief>
            <version>
 2.0
            </version>
            <Code> // Cancels the ongoing download operation with the specified ID.
 tizen.download.cancel(downloadId);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID of the ongoing download operation to stop.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the identifier does not match any download operation in progress.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="pause" id="::Download::DownloadManager::pause">
        <webidl>       void pause(long downloadId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Pauses an ongoing download operation that is specified by the <em>downloadId</em> parameter.
The paused download operation can be resumed later by the <em>resume()</em> method.
            </brief>
            <version>
 2.0
            </version>
            <Code> // Pauses the ongoing download operation with the specified ID.
 tizen.download.pause(downloadId);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID of the ongoing download operation to pause.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the identifier does not match any download operation in progress.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="resume" id="::Download::DownloadManager::resume">
        <webidl>       void resume(long downloadId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Resumes a paused download operation that is specified by the <em>downloadId</em> parameter.
            </brief>
            <version>
 2.0
            </version>
            <Code> // Resumes the paused download operation with the specified ID.
 tizen.download.resume(downloadId);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID of the paused download operation to resume.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the identifier does not match any download operation in progress.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getState" id="::Download::DownloadManager::getState">
        <webidl>       <ref>DownloadState</ref> getState(long downloadId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the download state of an operation synchronously with the specified ID.
            </brief>
            <version>
 2.0
            </version>
            <Code> // Gets the state of the download operation with the given ID.
 var state = tizen.download.getState(downloadId);
 </Code>
        </descriptive>
        <Type name="DownloadState">
          <descriptive>
              <description><p>
 DownloadState The current download state of the specified ID.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID to get the current state of the download operation.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the identifier does not match any download operation in progress.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getDownloadRequest" id="::Download::DownloadManager::getDownloadRequest">
        <webidl>       <ref>DownloadRequest</ref> getDownloadRequest(long downloadId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the DownloadRequest object from a given ID.
            </brief>
            <version>
 2.0
            </version>
            <Code> // Gets the download request information with the given ID.
 var downloadRequest = tizen.download.getDownloadRequest(downloadId);
 </Code>
        </descriptive>
        <Type name="DownloadRequest">
          <descriptive>
              <description><p>
 DownloadRequest The download request information of the given ID.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID to get the download request information.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the identifier does not match
any download operation in progress.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not
compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input
parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getMIMEType" id="::Download::DownloadManager::getMIMEType">
        <webidl>       DOMString getMIMEType(long downloadId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the MIME type of the downloaded file.
            </brief>
            <version>
 2.0
            </version>
            <remark>
 This function returns a valid MIME type when the download operation has been started
and successfully retrieves the file header.
            </remark>
            <Code> // Get the MIME type of the download operation with the given ID.
 var MIMEtype = tizen.download.getMIMEType(downloadId);
 </Code>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The MIME type of the downloaded file.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID to get the MIME type information.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the identifier does not match
any download operation in progress.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not
compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input
parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setListener" id="::Download::DownloadManager::setListener">
        <webidl>       void setListener(long downloadId, <ref>DownloadCallback</ref> downloadCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sets the download callback to the download operation of the given ID.
It's possible to change or register the listener of the download operation using the saved ID.
            </brief>
            <version>
 2.0
            </version>
            <Code> var listener = {
   onprogress: function(id, receivedSize, totalSize) {
     console.log('Received with id: ' + id + ', ' + receivedSize + '/' + totalSize);
   },
   onpaused: function(id) {
     console.log('Paused with id: ' + id);
   },
   oncanceled: function(id) {
     console.log('Canceled with id: ' + id);
   },
   oncompleted: function(id, fileName) {
     console.log('Completed with id: ' + id + ', file name: ' + fileName);
   },
   onfailed: function(id, error) {
     console.log('Failed with id: ' + id + ', error name: ' + error.name);
   }
 };

 // Start downloading the html file on the web with the corresponding callbacks.
 var downloadRequest = new tizen.DownloadRequest(&quot;http://download.tizen.org/tools/README.txt&quot;, &quot;documents&quot;);
 downloadId = tizen.download.start(downloadRequest);

 // Add the listener.
 tizen.download.setListener(downloadId, listener);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID to set the download callback.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
          <Argument name="downloadCallback">
            <descriptive>
                <description><p>
 The method to invoke when the download state changes or an error occurs.
                </p></description>
            </descriptive>
            <Type name="DownloadCallback"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type NotFoundError, if the identifier does not match
any download operation in progress.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not
compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input
parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="DownloadCallback" id="::Download::DownloadCallback">
      <webidl>   [Callback, NoInterfaceObject] interface DownloadCallback {
       void onprogress(long downloadId, unsigned long long receivedSize, unsigned long long totalSize);

       void onpaused(long downloadId);

       void oncanceled(long downloadId);

       void oncompleted(long downloadId, DOMString fullPath);

       void onfailed(long downloadId, <ref>WebAPIError</ref> error);
   };</webidl>
      <descriptive>
          <brief>
 The DownloadCallback defines notification callbacks for a download state change or progress.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onprogress" id="::Download::DownloadCallback::onprogress">
        <webidl>       void onprogress(long downloadId, unsigned long long receivedSize, unsigned long long totalSize);</webidl>
        <descriptive>
            <brief>
 Called when a download is successful and it is called multiple times as the download progresses.
The interval between the <em>onprogress()</em> callback is platform-dependent. When the download is started, the <em>receivedSize </em>can be <var>0</var>.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID of the corresponding download operation.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
          <Argument name="receivedSize">
            <descriptive>
                <description><p>
 The size of data received in bytes.
                </p></description>
            </descriptive>
            <Type type="unsigned long long"/>
          </Argument>
          <Argument name="totalSize">
            <descriptive>
                <description><p>
 The total size of data to receive in bytes.
                </p></description>
            </descriptive>
            <Type type="unsigned long long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="onpaused" id="::Download::DownloadCallback::onpaused">
        <webidl>       void onpaused(long downloadId);</webidl>
        <descriptive>
            <brief>
 Called when the download operation is paused by the <em>pause() </em>method.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID of the corresponding download operation.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="oncanceled" id="::Download::DownloadCallback::oncanceled">
        <webidl>       void oncanceled(long downloadId);</webidl>
        <descriptive>
            <brief>
 Called when the download operation is canceled by the <em>cancel() </em>method.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID of the corresponding download operation.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="oncompleted" id="::Download::DownloadCallback::oncompleted">
        <webidl>       void oncompleted(long downloadId, DOMString fullPath);</webidl>
        <descriptive>
            <brief>
 Called when the download operation is completed with the final full path.
If the same file name already exists in the destination, it is changed according to the platform policy and delivered in this callback.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID of the corresponding download operation.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
          <Argument name="fullPath">
            <descriptive>
                <description><p>
 The final full path for the downloaded file.
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="onfailed" id="::Download::DownloadCallback::onfailed">
        <webidl>       void onfailed(long downloadId, <ref>WebAPIError</ref> error);</webidl>
        <descriptive>
            <brief>
 Called when the download operation fails.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="downloadId">
            <descriptive>
                <description><p>
 The ID of the corresponding download operation.
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
          <Argument name="error">
            <descriptive>
                <description><p>
 The reason for download failure.
                </p></description>
            </descriptive>
            <Type name="WebAPIError"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="Exif" id="::Exif">
    <webidl>module Exif {

    enum WhiteBalanceMode { &quot;AUTO&quot;, &quot;MANUAL&quot; };

    enum ExposureProgram { &quot;NOT_DEFINED&quot;, &quot;MANUAL&quot;, &quot;NORMAL&quot;, &quot;APERTURE_PRIORITY&quot;, &quot;SHUTTER_PRIORITY&quot;, &quot;CREATIVE_PROGRAM&quot;, &quot;ACTION_PROGRAM&quot;, &quot;PORTRAIT_MODE&quot;, &quot;LANDSCAPE_MODE&quot; };

    [NoInterfaceObject] interface ExifManagerObject {
        readonly attribute <ref>ExifManager</ref> exif;
    };
    <ref>Tizen</ref> implements <ref>ExifManagerObject</ref>;

    [NoInterfaceObject] interface ExifManager {

        void getExifInfo(DOMString uri,
                         <ref>ExifInformationSuccessCallback</ref> successCallback,
                         optional <ref>ErrorCallback</ref>? errorCallback ) raises(<ref>WebAPIException</ref>);

        void saveExifInfo(<ref>ExifInformation</ref> exifInfo,
                          optional <ref>SuccessCallback</ref>? successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

        void getThumbnail(DOMString uri,
                          <ref>ExifThumbnailSuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);
    };

    dictionary ExifInit {
        DOMString uri;
        unsigned long width;
        unsigned long height;
        DOMString deviceMaker;
        DOMString deviceModel;
        Date originalTime;
        <ref>ImageContentOrientation</ref> orientation;
        double fNumber;
        unsigned short[] isoSpeedRatings;
        DOMString exposureTime;
        <ref>ExposureProgram</ref> exposureProgram;
        boolean flash;
        double focalLength;
        <ref>WhiteBalanceMode</ref> whiteBalance;
        <ref>SimpleCoordinates</ref> gpsLocation;
        double gpsAltitude;
        DOMString gpsProcessingMethod;
        Date gpsTime;
        DOMString userComment;
    };

    [Constructor(optional <ref>ExifInit</ref>? ExifInitDict)]
    interface ExifInformation {
        attribute DOMString uri;

        attribute unsigned long? width;

        attribute unsigned long? height;

        attribute DOMString? deviceMaker;

        attribute DOMString? deviceModel;

        attribute Date? originalTime;

        attribute <ref>ImageContentOrientation</ref>? orientation;

        attribute double? fNumber;

        attribute unsigned short[]? isoSpeedRatings;

        attribute DOMString? exposureTime;

        attribute <ref>ExposureProgram</ref>? exposureProgram;

        attribute boolean? flash;

        attribute double? focalLength;

        attribute <ref>WhiteBalanceMode</ref>? whiteBalance;

        attribute <ref>SimpleCoordinates</ref>? gpsLocation;

        attribute double? gpsAltitude;

        attribute DOMString? gpsProcessingMethod;

        attribute <ref>TZDate</ref>? gpsTime;

        attribute DOMString? userComment;

    };

    [Callback=FunctionOnly, NoInterfaceObject] interface ExifInformationSuccessCallback {
        void onsuccess(<ref>ExifInformation</ref> exifInfo);
    };

    [Callback=FunctionOnly, NoInterfaceObject] interface ExifThumbnailSuccessCallback {
        void onsuccess(DOMString? uri);
    };

};</webidl>
    <descriptive>
        <brief>
 The Exif API provides interfaces and methods for manipulating <a href="http://en.wikipedia.org/wiki/Exchangeable_image_file_format">Exif</a> data from a JPEG file.
The <em>ExifManager</em> object provides methods to retrieve the <em>ExifInformation</em> object from a JPEG file
and save the Exif data from the <em>ExifInformation</em> object in the JPEG file.
The <em>ExifInformation</em> object provides functionality to get and set the Exif attributes corresponding to the Exif tag.
Changing the value of the attribute in the <em>ExifInformation</em> object stores the Exif data in the <em>ExifInformation</em> object. It does not change data in the JPEG file.
For applying the modified Exif data to the JPEG file,
the saveExifInfo() method of the <em>ExifManager</em> object should be called with the <em>ExifInformation</em> object that has the modified Exif data.
        </brief>
       <description>
        <p>
For more information about how to use Exif API, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/content_guide/exif.htm">Exif Guide</a>.
        </p>
       </description>
        <version>
 2.3
        </version>
    </descriptive>
    <Enum name="WhiteBalanceMode" id="::Exif::WhiteBalanceMode">
      <webidl>    enum WhiteBalanceMode { &quot;AUTO&quot;, &quot;MANUAL&quot; };</webidl>
      <descriptive>
          <brief>
 Specifies a white balance mode for an image.
          </brief>
         <description>
          <ul>
            <li>
AUTO - Automatic White Balance mode            </li>
            <li>
MANUAL - Manual White Balance mode            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="AUTO">
        <webidl> &quot;AUTO</webidl>
      </EnumValue>
      <EnumValue stringvalue="MANUAL">
        <webidl> &quot;MANUAL</webidl>
      </EnumValue>
    </Enum>
    <Enum name="ExposureProgram" id="::Exif::ExposureProgram">
      <webidl>    enum ExposureProgram { &quot;NOT_DEFINED&quot;, &quot;MANUAL&quot;, &quot;NORMAL&quot;, &quot;APERTURE_PRIORITY&quot;, &quot;SHUTTER_PRIORITY&quot;, &quot;CREATIVE_PROGRAM&quot;, &quot;ACTION_PROGRAM&quot;, &quot;PORTRAIT_MODE&quot;, &quot;LANDSCAPE_MODE&quot; };</webidl>
      <descriptive>
          <brief>
 Specifies an exposure balance program for an image.
          </brief>
         <description>
          <p>
Some additional information can be found in the <a href="http://en.wikipedia.org/wiki/List_of_digital_camera_modes">List of digital camera modes</a> article.
          </p>
          <ul>
            <li>
NOT_DEFINED - Exposure program info is not present or is unknown            </li>
            <li>
MANUAL - In the manual mode both shutter speed and aperture are independently set manually (with ISO sensitivity also set manually)            </li>
            <li>
APERTURE_PRIORITY - aka A, Av(Aperture value) mode enables manual control of the aperture, and shutter speed is calculated by the camera for proper exposure (given an ISO sensitivity)            </li>
            <li>
SHUTTER_PRIORITY - aka S, Tv(Time value) mode enables manual control of the shutter speed, and aperture is calculated by the camera for proper exposure (given an ISO sensitivity)            </li>
            <li>
CREATIVE_PROGRAM - Program mode makes the camera calculate both shutter speed and aperture (given a manually or automatically selected ISO)            </li>
            <li>
ACTION_PROGRAM - Action or sports modes increase ISO and use a faster shutter speed to capture an action            </li>
            <li>
PORTRAIT_MODE - Portrait mode widens the aperture to throw the background out of focus. The camera may recognize and focus on a human face            </li>
            <li>
LANDSCAPE_MODE - Landscape modes use a small aperture to gain depth of a field            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="NOT_DEFINED">
        <webidl> &quot;NOT_DEFINED</webidl>
      </EnumValue>
      <EnumValue stringvalue="MANUAL">
        <webidl> &quot;MANUAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="NORMAL">
        <webidl> &quot;NORMAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="APERTURE_PRIORITY">
        <webidl> &quot;APERTURE_PRIORITY</webidl>
      </EnumValue>
      <EnumValue stringvalue="SHUTTER_PRIORITY">
        <webidl> &quot;SHUTTER_PRIORITY</webidl>
      </EnumValue>
      <EnumValue stringvalue="CREATIVE_PROGRAM">
        <webidl> &quot;CREATIVE_PROGRAM</webidl>
      </EnumValue>
      <EnumValue stringvalue="ACTION_PROGRAM">
        <webidl> &quot;ACTION_PROGRAM</webidl>
      </EnumValue>
      <EnumValue stringvalue="PORTRAIT_MODE">
        <webidl> &quot;PORTRAIT_MODE</webidl>
      </EnumValue>
      <EnumValue stringvalue="LANDSCAPE_MODE">
        <webidl> &quot;LANDSCAPE_MODE</webidl>
      </EnumValue>
    </Enum>
    <Interface name="ExifManagerObject" id="::Exif::ExifManagerObject">
      <webidl>    [NoInterfaceObject] interface ExifManagerObject {
        readonly attribute <ref>ExifManager</ref> exif;
    };</webidl>
      <descriptive>
          <brief>
 The ExifManagerObject interface defines what is instantiated by the <em>Tizen</em> object from the Tizen Platform.
The <em>tizen.exif</em> object allows access to the Exif data of a JPEG file.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="exif" id="::Exif::ExifManagerObject::exif">
        <webidl>        readonly attribute <ref>ExifManager</ref> exif;</webidl>
        <Type name="ExifManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="ExifManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>ExifManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="ExifManager" id="::Exif::ExifManager">
      <webidl>    [NoInterfaceObject] interface ExifManager {

        void getExifInfo(DOMString uri,
                         <ref>ExifInformationSuccessCallback</ref> successCallback,
                         optional <ref>ErrorCallback</ref>? errorCallback ) raises(<ref>WebAPIException</ref>);

        void saveExifInfo(<ref>ExifInformation</ref> exifInfo,
                          optional <ref>SuccessCallback</ref>? successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

        void getThumbnail(DOMString uri,
                          <ref>ExifThumbnailSuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);
    };</webidl>
      <descriptive>
          <brief>
 The ExifManager interface provides methods to retrieve the <em>ExifInformation</em> object and save the Exif data of the <em>ExifInformation</em> object in a JPEG file.
          </brief>
         <description>
          <p>
It provides access to the API functionalities through the <em>tizen.exif</em> interface.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="getExifInfo" id="::Exif::ExifManager::getExifInfo">
        <webidl>        void getExifInfo(DOMString uri,
                         <ref>ExifInformationSuccessCallback</ref> successCallback,
                         optional <ref>ErrorCallback</ref>? errorCallback ) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the <em>ExifInformation</em> object to manipulate the Exif data in a JPEG file.
            </brief>
           <description>
            <p>
This function returns (via callback) the <em>ExifInformation</em> object that contains the Exif data in the JPEG file.
            </p>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError: If the file of the input parameters is not found or the file does not contain Exif data              </li>
              <li>
IOError: If access to the image file is denied due to insufficient permissions              </li>
              <li>
InvalidValuesError: If any input parameter contains invalid values              </li>
              <li>
UnknownError: In any other error case              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <Code> //Preconditions: please provide images/tizen.jpg file with present Exif data

 // Defines success callback
 function onSuccess(exifInfo) {
     console.log(&quot;success to get Exif information object&quot;);
 }

 // Defines error callback
 function onError(error) {
     console.log(&quot;error occured: &quot; + error.name);
 }

 function resolveSuccess(file) {
     tizen.exif.getExifInfo(file.toURI(), onSuccess, onError);
 }

 function resolveFail(error) {
    console.log(&quot;error occured: &quot; + error.name);
 }
 tizen.filesystem.resolve(&quot;images/tizen.jpg&quot;, resolveSuccess, resolveFail);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="uri">
            <descriptive>
                <description><p>
 URI of the JPEG file, as available in ImageContent::contentURI or returned by File::toURI()
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when Exif information has been retrieved successfully
                </p></description>
            </descriptive>
            <Type name="ExifInformationSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="saveExifInfo" id="::Exif::ExifManager::saveExifInfo">
        <webidl>        void saveExifInfo(<ref>ExifInformation</ref> exifInfo,
                          optional <ref>SuccessCallback</ref>? successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Saves the Exif data of the <em>ExifInformation</em> object into the JPEG file.
            </brief>
           <description>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError: If the file of the input parameters is not found              </li>
              <li>
InvalidValuesError: If any input parameter contains invalid values              </li>
              <li>
UnknownError: In any other error case              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <Code> //Preconditions: please provide images/tizen.jpg file with present Exif data

 // Defines success callback
 function onSaveSuccess() {
     console.log(&quot;success to save Exif information&quot;);
 }

 // Defines error callback
 function onSaveError(error) {
     console.log(&quot;error occur&quot; + error.name);
 }

 // Defines success callback
 function onSuccess(exifInfo) {
     console.log(&quot;success to get Exif information object&quot;);
     exifInfo.orientation = &quot;ROTATE_90&quot;;
     tizen.exif.saveExifInfo(exifInfo, onSaveSuccess, onSaveError);
 }

 // Defines error callback
 function onError(error) {
     console.log(&quot;error occur&quot; + error.name);
 }

 function resolveSuccess(file) {
     tizen.exif.getExifInfo(file.toURI(), onSuccess, onError);
 }

 function resolveFail(error) {
    console.log(&quot;error occured: &quot; + error.name);
 }

 tizen.filesystem.resolve(&quot;images/tizen.jpg&quot;, resolveSuccess, resolveFail);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="exifInfo">
            <descriptive>
                <description><p>
 Exif information object that contains the Exif data in the JPEG file
                </p></description>
            </descriptive>
            <Type name="ExifInformation"/>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when Exif data has been saved successfully
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getThumbnail" id="::Exif::ExifManager::getThumbnail">
        <webidl>        void getThumbnail(DOMString uri,
                          <ref>ExifThumbnailSuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the thumbnail of the specified JPEG file. If there is no thumbnail in the JPEG file, <var>null</var> is returned.
            </brief>
           <description>
            <p>
<em>successCallback</em> is invoked with a URI as the first argument.
This URI is a <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">data URI</a>.
It can be used as an src attribute value of the img element.
            </p>
            <p>
The errorCallback is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError: If the file of the input parameters is not found              </li>
              <li>
IOError: If access to the thumbnail file is denied due to insufficient permissions              </li>
              <li>
InvalidValuesError: If any of the input parameters contains an invalid value              </li>
              <li>
UnknownError: In any other error case              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <Code> //Preconditions: please provide images/tizen.jpg file with present Exif data

 // Defines success callback
 function onSuccess(thumbData) {
     console.log(&quot;got thumbnail data of JPEG file&quot;);
     if (thumbData) {
         var img = new Image();
         img.src = thumbData;
         document.body.appendChild(img);
     }
 }

 // Defines error callback
 function onError(error) {
     console.log(&quot;error occur&quot; + error.name);
 }

 function resolveSuccess(file) {
     tizen.exif.getThumbnail(file.toURI(), onSuccess, onError);
 }

 function resolveFail(error) {
    console.log(&quot;error occured: &quot; + error.name);
 }

 tizen.filesystem.resolve(&quot;images/tizen.jpg&quot;, resolveSuccess, resolveFail);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="uri">
            <descriptive>
                <description><p>
 URI of the JPEG file
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when thumbnail data has been retrieved successfully
                </p></description>
            </descriptive>
            <Type name="ExifThumbnailSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Dictionary name="ExifInit" id="::Exif::ExifInit">
      <webidl>    dictionary ExifInit {
        DOMString uri;
        unsigned long width;
        unsigned long height;
        DOMString deviceMaker;
        DOMString deviceModel;
        Date originalTime;
        <ref>ImageContentOrientation</ref> orientation;
        double fNumber;
        unsigned short[] isoSpeedRatings;
        DOMString exposureTime;
        <ref>ExposureProgram</ref> exposureProgram;
        boolean flash;
        double focalLength;
        <ref>WhiteBalanceMode</ref> whiteBalance;
        <ref>SimpleCoordinates</ref> gpsLocation;
        double gpsAltitude;
        DOMString gpsProcessingMethod;
        Date gpsTime;
        DOMString userComment;
    };</webidl>
      <descriptive>
          <brief>
 Dictionary for specifying <em>ExifInformation</em> attributes upon <em>ExifInformation</em> creation.
          </brief>
         <description>
          <p>
This dictionary is used to input parameters when <em>ExifInformation</em> is created.
For description of attributes please see the corresponding attributes in the <em>ExifInformation<em> interface.
</em></em>          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <DictionaryMember name="uri" id="::Exif::ExifInit::uri">
        <webidl>        DOMString uri;</webidl>
        <Type type="DOMString"/>
      </DictionaryMember>
      <DictionaryMember name="width" id="::Exif::ExifInit::width">
        <webidl>        unsigned long width;</webidl>
        <Type type="unsigned long"/>
      </DictionaryMember>
      <DictionaryMember name="height" id="::Exif::ExifInit::height">
        <webidl>        unsigned long height;</webidl>
        <Type type="unsigned long"/>
      </DictionaryMember>
      <DictionaryMember name="deviceMaker" id="::Exif::ExifInit::deviceMaker">
        <webidl>        DOMString deviceMaker;</webidl>
        <Type type="DOMString"/>
      </DictionaryMember>
      <DictionaryMember name="deviceModel" id="::Exif::ExifInit::deviceModel">
        <webidl>        DOMString deviceModel;</webidl>
        <Type type="DOMString"/>
      </DictionaryMember>
      <DictionaryMember name="originalTime" id="::Exif::ExifInit::originalTime">
        <webidl>        Date originalTime;</webidl>
        <Type type="Date"/>
      </DictionaryMember>
      <DictionaryMember name="orientation" id="::Exif::ExifInit::orientation">
        <webidl>        <ref>ImageContentOrientation</ref> orientation;</webidl>
        <Type name="ImageContentOrientation"/>
      </DictionaryMember>
      <DictionaryMember name="fNumber" id="::Exif::ExifInit::fNumber">
        <webidl>        double fNumber;</webidl>
        <Type type="double"/>
      </DictionaryMember>
      <DictionaryMember name="isoSpeedRatings" id="::Exif::ExifInit::isoSpeedRatings">
        <webidl>        unsigned short[] isoSpeedRatings;</webidl>
        <Type type="array">
          <Type type="unsigned short"/>
        </Type>
      </DictionaryMember>
      <DictionaryMember name="exposureTime" id="::Exif::ExifInit::exposureTime">
        <webidl>        DOMString exposureTime;</webidl>
        <Type type="DOMString"/>
      </DictionaryMember>
      <DictionaryMember name="exposureProgram" id="::Exif::ExifInit::exposureProgram">
        <webidl>        <ref>ExposureProgram</ref> exposureProgram;</webidl>
        <Type name="ExposureProgram"/>
      </DictionaryMember>
      <DictionaryMember name="flash" id="::Exif::ExifInit::flash">
        <webidl>        boolean flash;</webidl>
        <Type type="boolean"/>
      </DictionaryMember>
      <DictionaryMember name="focalLength" id="::Exif::ExifInit::focalLength">
        <webidl>        double focalLength;</webidl>
        <Type type="double"/>
      </DictionaryMember>
      <DictionaryMember name="whiteBalance" id="::Exif::ExifInit::whiteBalance">
        <webidl>        <ref>WhiteBalanceMode</ref> whiteBalance;</webidl>
        <Type name="WhiteBalanceMode"/>
      </DictionaryMember>
      <DictionaryMember name="gpsLocation" id="::Exif::ExifInit::gpsLocation">
        <webidl>        <ref>SimpleCoordinates</ref> gpsLocation;</webidl>
        <Type name="SimpleCoordinates"/>
      </DictionaryMember>
      <DictionaryMember name="gpsAltitude" id="::Exif::ExifInit::gpsAltitude">
        <webidl>        double gpsAltitude;</webidl>
        <Type type="double"/>
      </DictionaryMember>
      <DictionaryMember name="gpsProcessingMethod" id="::Exif::ExifInit::gpsProcessingMethod">
        <webidl>        DOMString gpsProcessingMethod;</webidl>
        <Type type="DOMString"/>
      </DictionaryMember>
      <DictionaryMember name="gpsTime" id="::Exif::ExifInit::gpsTime">
        <webidl>        Date gpsTime;</webidl>
        <Type type="Date"/>
      </DictionaryMember>
      <DictionaryMember name="userComment" id="::Exif::ExifInit::userComment">
        <webidl>        DOMString userComment;</webidl>
        <Type type="DOMString"/>
      </DictionaryMember>
    </Dictionary>
    <Interface name="ExifInformation" id="::Exif::ExifInformation">
      <webidl>    [Constructor(optional <ref>ExifInit</ref>? ExifInitDict)]
    interface ExifInformation {
        attribute DOMString uri;

        attribute unsigned long? width;

        attribute unsigned long? height;

        attribute DOMString? deviceMaker;

        attribute DOMString? deviceModel;

        attribute Date? originalTime;

        attribute <ref>ImageContentOrientation</ref>? orientation;

        attribute double? fNumber;

        attribute unsigned short[]? isoSpeedRatings;

        attribute DOMString? exposureTime;

        attribute <ref>ExposureProgram</ref>? exposureProgram;

        attribute boolean? flash;

        attribute double? focalLength;

        attribute <ref>WhiteBalanceMode</ref>? whiteBalance;

        attribute <ref>SimpleCoordinates</ref>? gpsLocation;

        attribute double? gpsAltitude;

        attribute DOMString? gpsProcessingMethod;

        attribute <ref>TZDate</ref>? gpsTime;

        attribute DOMString? userComment;

    };</webidl>
      <descriptive>
          <brief>
 The ExifInformation interface implements the <em>ExifInformation</em> object.
          </brief>
         <description>
          <p>
When the format of a value is given in the attribute description then this format should be followed when updating values.
          </p>
          <p>
Every Exif related attribute is nullable - null means that this information is missing in the file.
By setting an attribute to null and saving <em>ExifInformation</em> one can remove that Exif tag from the file.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(optional <ref>ExifInit</ref>? ExifInitDict)</webidl>
          <ArgumentList>
            <Argument optional="optional" name="ExifInitDict">
              <Type name="ExifInit" nullable="nullable"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute name="uri" id="::Exif::ExifInformation::uri">
        <webidl>        attribute DOMString uri;</webidl>
        <descriptive>
            <brief>
 URI of the image.
            </brief>
           <description>
            <p>
The path to the file from which <em>ExifInformation</em> data is collected.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute name="width" id="::Exif::ExifInformation::width">
        <webidl>        attribute unsigned long? width;</webidl>
        <descriptive>
            <brief>
 Width of the image i.e. the number of points (pixels) per image line.
            </brief>
           <description>
            <p>
Note if the value of this attribute is changed, the new value is not verified against the actual size of the image.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="unsigned long" nullable="nullable"/>
      </Attribute>
      <Attribute name="height" id="::Exif::ExifInformation::height">
        <webidl>        attribute unsigned long? height;</webidl>
        <descriptive>
            <brief>
 Height of the image i.e. the number of lines in the image.
            </brief>
           <description>
            <p>
Note if the value of this attribute is changed, the new value is not verified against the actual size of the image.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="unsigned long" nullable="nullable"/>
      </Attribute>
      <Attribute name="deviceMaker" id="::Exif::ExifInformation::deviceMaker">
        <webidl>        attribute DOMString? deviceMaker;</webidl>
        <descriptive>
            <brief>
 Name of the camera manufacturer.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="deviceModel" id="::Exif::ExifInformation::deviceModel">
        <webidl>        attribute DOMString? deviceModel;</webidl>
        <descriptive>
            <brief>
 Model name or model number of the camera or input device.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="originalTime" id="::Exif::ExifInformation::originalTime">
        <webidl>        attribute Date? originalTime;</webidl>
        <descriptive>
            <brief>
 Date and time when the picture was taken.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="Date" nullable="nullable"/>
      </Attribute>
      <Attribute name="orientation" id="::Exif::ExifInformation::orientation">
        <webidl>        attribute <ref>ImageContentOrientation</ref>? orientation;</webidl>
        <descriptive>
            <brief>
 Orientation of the image the image when displayed.
            </brief>
           <description>
            <p>
This attribute shows the relation between the stored image data and the visual content orientation.
In other words - how a stored image should be oriented when presented to the user.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="ImageContentOrientation" nullable="nullable"/>
      </Attribute>
      <Attribute name="fNumber" id="::Exif::ExifInformation::fNumber">
        <webidl>        attribute double? fNumber;</webidl>
        <descriptive>
            <brief>
 The f-number when the image was taken.
            </brief>
           <description>
            <p>
Exif specification: &quot;Conversion is not made to the focal length of a 35 mm film&quot;.
            </p>
            <p>
The <a href="http://en.wikipedia.org/wiki/F-number">f-number</a> is the ratio of the lens' focal length to the diameter of the entrance pupil.
F-number is also called focal ratio, f-ratio, f-stop, or relative aperture.
Example values: 1.4, 2, 2.8, 4, 5.6, 8, 11 ...
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="double" nullable="nullable"/>
      </Attribute>
      <Attribute name="isoSpeedRatings" id="::Exif::ExifInformation::isoSpeedRatings">
        <webidl>        attribute unsigned short[]? isoSpeedRatings;</webidl>
        <descriptive>
            <brief>
 Photo sensitivity (also called ISO speed and ISO latitude) of the camera or input device.
            </brief>
           <description>
            <p>
Example values: 80, 100, 200, 400, 800, 1600, 3200 ..
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="array" nullable="nullable">
          <Type type="unsigned short"/>
        </Type>
      </Attribute>
      <Attribute name="exposureTime" id="::Exif::ExifInformation::exposureTime">
        <webidl>        attribute DOMString? exposureTime;</webidl>
        <descriptive>
            <brief>
 Exposure time, given in seconds.
            </brief>
           <description>
            <p>
If exposure time is below one second it is expressed as 1/x.
For example: 1 second exposure is &quot;1&quot;, 0.25s is &quot;1/4&quot;.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="exposureProgram" id="::Exif::ExifInformation::exposureProgram">
        <webidl>        attribute <ref>ExposureProgram</ref>? exposureProgram;</webidl>
        <descriptive>
            <brief>
 Exposure balance program used by the camera to set exposure when the picture was taken.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="ExposureProgram" nullable="nullable"/>
      </Attribute>
      <Attribute name="flash" id="::Exif::ExifInformation::flash">
        <webidl>        attribute boolean? flash;</webidl>
        <descriptive>
            <brief>
 Boolean value that indicates whether flash was fired when the picture was taken (true: flash fired).
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="boolean" nullable="nullable"/>
      </Attribute>
      <Attribute name="focalLength" id="::Exif::ExifInformation::focalLength">
        <webidl>        attribute double? focalLength;</webidl>
        <descriptive>
            <brief>
 Focal length of the lens, given in mm.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="double" nullable="nullable"/>
      </Attribute>
      <Attribute name="whiteBalance" id="::Exif::ExifInformation::whiteBalance">
        <webidl>        attribute <ref>WhiteBalanceMode</ref>? whiteBalance;</webidl>
        <descriptive>
            <brief>
 White balance mode set when the picture was taken.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="WhiteBalanceMode" nullable="nullable"/>
      </Attribute>
      <Attribute name="gpsLocation" id="::Exif::ExifInformation::gpsLocation">
        <webidl>        attribute <ref>SimpleCoordinates</ref>? gpsLocation;</webidl>
        <descriptive>
            <brief>
 Latitude and longitude of the camera (from GPS) when the picture was taken.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="SimpleCoordinates" nullable="nullable"/>
      </Attribute>
      <Attribute name="gpsAltitude" id="::Exif::ExifInformation::gpsAltitude">
        <webidl>        attribute double? gpsAltitude;</webidl>
        <descriptive>
            <brief>
 Altitude (from GPS) of the camera when the picture was taken.
            </brief>
           <description>
            <p>
This value is expressed in meters above sea level (can be negative).
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="double" nullable="nullable"/>
      </Attribute>
      <Attribute name="gpsProcessingMethod" id="::Exif::ExifInformation::gpsProcessingMethod">
        <webidl>        attribute DOMString? gpsProcessingMethod;</webidl>
        <descriptive>
            <brief>
 Name of the method used for finding the location.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute name="gpsTime" id="::Exif::ExifInformation::gpsTime">
        <webidl>        attribute <ref>TZDate</ref>? gpsTime;</webidl>
        <descriptive>
            <brief>
 Date and time information relative to UTC (Universal Time Coordinated) provided by GPS when the photo was taken.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="TZDate" nullable="nullable"/>
      </Attribute>
      <Attribute name="userComment" id="::Exif::ExifInformation::userComment">
        <webidl>        attribute DOMString? userComment;</webidl>
        <descriptive>
            <brief>
 User comment.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
    </Interface>
    <Interface name="ExifInformationSuccessCallback" id="::Exif::ExifInformationSuccessCallback">
      <webidl>    [Callback=FunctionOnly, NoInterfaceObject] interface ExifInformationSuccessCallback {
        void onsuccess(<ref>ExifInformation</ref> exifInfo);
    };</webidl>
      <descriptive>
          <brief>
 The ExifInformationSuccessCallback interface provides a success callback that is invoked when the Exif information object has been retrieved.
This callback interface specifies a success method with an <em>ExifInformation</em> object as an input parameter. It is used in exif.getExifInfo().
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Exif::ExifInformationSuccessCallback::onsuccess">
        <webidl>        void onsuccess(<ref>ExifInformation</ref> exifInfo);</webidl>
        <descriptive>
            <brief>
 Called when the Exif information object has been successfully retrieved.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="exifInfo">
            <descriptive>
                <description><p>
 <em>ExifInformation</em> to be retrieved
                </p></description>
            </descriptive>
            <Type name="ExifInformation"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ExifThumbnailSuccessCallback" id="::Exif::ExifThumbnailSuccessCallback">
      <webidl>    [Callback=FunctionOnly, NoInterfaceObject] interface ExifThumbnailSuccessCallback {
        void onsuccess(DOMString? uri);
    };</webidl>
      <descriptive>
          <brief>
 The ExifThumbnailSuccessCallback interface provides a success callback that is invoked when the Exif thumbnail has been retrieved.
This callback interface specifies a success method with the URI for the thumbnail as an input parameter. It is used in exif.getThumbnail().
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Exif::ExifThumbnailSuccessCallback::onsuccess">
        <webidl>        void onsuccess(DOMString? uri);</webidl>
        <descriptive>
            <brief>
 Called when the thumbnail of the JPEG file has been successfully retrieved.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="uri">
            <descriptive>
                <description><p>
 URI for the thumbnail to be retrieved <br/>If there is no thumbnail in the JPEG file, <var>null</var> is returned.
                </p></description>
            </descriptive>
            <Type type="DOMString" nullable="nullable"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="Filesystem" id="::Filesystem">
    <webidl>module Filesystem {
  enum FileMode { &quot;r&quot;, &quot;rw&quot;, &quot;w&quot;, &quot;a&quot; };

  enum FileSystemStorageType { &quot;INTERNAL&quot;, &quot;EXTERNAL&quot; };

  enum FileSystemStorageState { &quot;MOUNTED&quot;, &quot;REMOVED&quot;, &quot;UNMOUNTABLE&quot; };

  [NoInterfaceObject] interface FileSystemManagerObject {
    readonly attribute <ref>FileSystemManager</ref> filesystem;
  };
  <ref>Tizen</ref> implements <ref>FileSystemManagerObject</ref>;

  [NoInterfaceObject] interface FileSystemManager {
    readonly attribute long maxPathLength;

    void resolve(DOMString location,
                 <ref>FileSuccessCallback</ref> onsuccess,
                 optional <ref>ErrorCallback</ref>? onerror,
                 optional <ref>FileMode</ref>? mode) raises(<ref>WebAPIException</ref>);

    void getStorage(DOMString label,
                    <ref>FileSystemStorageSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    void listStorages(<ref>FileSystemStorageArraySuccessCallback</ref> onsuccess,
                      optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    long addStorageStateChangeListener(<ref>FileSystemStorageSuccessCallback</ref> onsuccess,
                                       optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    void removeStorageStateChangeListener(long watchId) raises(<ref>WebAPIException</ref>);
  };

  [NoInterfaceObject] interface FileSystemStorage {
    readonly attribute DOMString label;

    readonly attribute <ref>FileSystemStorageType</ref> type;

    readonly attribute <ref>FileSystemStorageState</ref> state;
  };

  [NoInterfaceObject] interface File {
    readonly attribute <ref>File</ref>? parent;

    readonly attribute boolean readOnly;

    readonly attribute boolean isFile;

    readonly attribute boolean isDirectory;

    readonly attribute Date? created;

    readonly attribute Date? modified;

    readonly attribute DOMString path;

    readonly attribute DOMString name;

    readonly attribute DOMString fullPath;

    readonly attribute unsigned long long fileSize;

    readonly attribute long length;

    DOMString toURI() raises(<ref>WebAPIException</ref>);

    void listFiles(<ref>FileArraySuccessCallback</ref> onsuccess,
                   optional <ref>ErrorCallback</ref>? onerror,
                   optional <ref>FileFilter</ref>? filter) raises(<ref>WebAPIException</ref>);

    void openStream(<ref>FileMode</ref> mode,
                    <ref>FileStreamSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror,
                    optional DOMString? encoding) raises(<ref>WebAPIException</ref>);

    void readAsText(<ref>FileStringSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror,
                    optional DOMString? encoding) raises(<ref>WebAPIException</ref>);

    void copyTo(DOMString originFilePath,
                DOMString destinationFilePath,
                boolean overwrite,
                optional <ref>SuccessCallback</ref>? onsuccess,
                optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    void moveTo(DOMString originFilePath,
                DOMString destinationFilePath,
                boolean overwrite,
                optional <ref>SuccessCallback</ref>? onsuccess,
                optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    <ref>File</ref> createDirectory(DOMString dirPath) raises(<ref>WebAPIException</ref>);

    <ref>File</ref> createFile(DOMString relativeFilePath) raises(<ref>WebAPIException</ref>);

    <ref>File</ref> resolve(DOMString filePath) raises(<ref>WebAPIException</ref>);

    void deleteDirectory(DOMString directoryPath,
                         boolean recursive,
                         optional <ref>SuccessCallback</ref>? onsuccess,
                         optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    void deleteFile(DOMString filePath,
                    optional <ref>SuccessCallback</ref>? onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);
  };


  dictionary FileFilter {
    DOMString name;

    Date startModified;

    Date endModified;

    Date startCreated;

    Date endCreated;
  };

  [NoInterfaceObject] interface FileStream {
    readonly attribute boolean eof;

    attribute long position setraises(<ref>WebAPIException</ref>);

    readonly attribute long bytesAvailable;

    void close();

    DOMString read(long charCount) raises(<ref>WebAPIException</ref>);

    octet[] readBytes(long byteCount) raises(<ref>WebAPIException</ref>);

    DOMString readBase64(long byteCount) raises(<ref>WebAPIException</ref>);

    void write(DOMString stringData) raises(<ref>WebAPIException</ref>);

    void writeBytes(octet[] byteData) raises(<ref>WebAPIException</ref>);

    void writeBase64(DOMString base64Data) raises(<ref>WebAPIException</ref>);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface FileSuccessCallback {
    void onsuccess(<ref>File</ref> file);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface FileSystemStorageArraySuccessCallback {
    void onsuccess(<ref>FileSystemStorage</ref>[] storages);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface FileSystemStorageSuccessCallback {
    void onsuccess(<ref>FileSystemStorage</ref> storage);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface FileStringSuccessCallback {
    void onsuccess(DOMString fileStr);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface FileStreamSuccessCallback {
    void onsuccess(<ref>FileStream</ref> filestream);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface FileArraySuccessCallback {
    void onsuccess(<ref>File</ref>[] files);
  };
};</webidl>
    <descriptive>
        <brief>
 The Filesystem API provides access to a device's filesystem.
        </brief>
       <description>
        <p>
The filesystem is represented as an abstract collection of disjointed filesystem virtual
root locations, each corresponding to a specific location in the device
filesystem. The filesystem API exposes the hierarchies below these root
locations as a single virtual filesystem, but provides no access to other
parts of the device filesystem.
        </p>
        <p>
Each virtual root has a string name. Each file or directory within the virtual
filesystem is addressed using a fully-qualified path of the form:
<em>&#60;root name&#62;/&#60;path&#62;</em> where <em>&#60;rootname&#62;</em> is
the name of the virtual root and <em>&#60;path&#62;</em> is the path to the file or
directory relative to that root.
        </p>
        <p>
The following virtual roots must be supported:
        </p>
        <ul>
          <li>
images - the location for images          </li>
          <li>
videos - the location for videos          </li>
          <li>
music - the location for sounds          </li>
          <li>
documents - the location for documents          </li>
          <li>
downloads - the location for downloaded items           </li>
          <li>
ringtones - the location for ringtones (read-only location)           </li>
          <li>
camera - the location for the pictures and videos taken by a device (supported since Tizen 2.3)           </li>
          <li>
wgt-package - the location for widget package which is read-only          </li>
          <li>
wgt-private - the location for a widget's private storage           </li>
          <li>
wgt-private-tmp - the location for a widget's private volatile storage          </li>
        </ul>
        <p>
The file URI path is also supported. To access other paths out of virtual root, for example '/tmp/', 'file:///tmp' can be used as location parameter.
        </p>
        <p>
To access specific locations apart from those specified above, a file handle must be retrieved using the <em>filesystem.resolve() </em>call.
        </p>
        <p>
A file handle represents either a file or a directory:        </p>
        <ul>
          <li>
For a file, the <em>isFile </em>attribute is set to <var>true</var>.          </li>
          <li>
For a directory, the <em>isDirectory </em>attribute is set to <var>true</var>.          </li>
        </ul>
        <p>
A file can be opened for both read and write operations, using a
FileStream handle. A list of files and sub-directories can be obtained from a
directory and a resolve method exists to resolve files or sub-directories
more conveniently than processing directory listings.
        </p>
        <p>
The implementation must support the use of the following characters in file names:
        </p>
        <ul>
          <li>
Letters (a-z, A-Z)          </li>
          <li>
Numbers (0-9)          </li>
          <li>
Blank space          </li>
          <li>
Underscore (&quot;_&quot;)          </li>
          <li>
Hyphen (&quot;-&quot;)          </li>
          <li>
Period (&quot;.&quot;)          </li>
        </ul>
        <p>
The implementation may support additional characters in file names, depending on platform support.
        </p>
        <p>
The implementation may forbid the use of additional characters in file names, depending on the platform. The use of the path (component) separator &quot;/&quot; should not be allowed in file names.
        </p>
        <p>
Some other file name and path characteristics are platform-dependent,
for example, maximum path length, file name length, case sensitivity, additional
character support, etc. Therefore, it is recommended to avoid any dependency
on aspects that cannot be supported across multiple platforms.
        </p>
        <p>
When a path is used to interact with the underlying filesystem, the encoding used for the file path should be the platform default.
        </p>
        <p>
For more information on the Filesystem features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/io_guide/filesystem.htm">File System Guide</a>.
        </p>
       </description>
        <version>
 1.0
        </version>
    </descriptive>
    <Enum name="FileMode" id="::Filesystem::FileMode">
      <webidl>  enum FileMode { &quot;r&quot;, &quot;rw&quot;, &quot;w&quot;, &quot;a&quot; };</webidl>
      <descriptive>
          <brief>
 Specifies the file modes when it is opened.
          </brief>
         <description>
          <p>
The file modes defined by this enumerator are:
          </p>
          <ul>
            <li>
r - read-only access            </li>
            <li>
rw - read and write access            </li>
            <li>
w - write access            </li>
            <li>
a - append access            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <EnumValue stringvalue="r">
        <webidl> &quot;r</webidl>
      </EnumValue>
      <EnumValue stringvalue="rw">
        <webidl> &quot;rw</webidl>
      </EnumValue>
      <EnumValue stringvalue="w">
        <webidl> &quot;w</webidl>
      </EnumValue>
      <EnumValue stringvalue="a">
        <webidl> &quot;a</webidl>
      </EnumValue>
    </Enum>
    <Enum name="FileSystemStorageType" id="::Filesystem::FileSystemStorageType">
      <webidl>  enum FileSystemStorageType { &quot;INTERNAL&quot;, &quot;EXTERNAL&quot; };</webidl>
      <descriptive>
          <brief>
 Specifies the type of storage.
          </brief>
         <description>
          <ul>
            <li>
INTERNAL - Internal storage is a storage that cannot be removed, such as a flash memory.            </li>
            <li>
EXTERNAL - External storage is removable storage, such as a USB drive or memory cards.            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <EnumValue stringvalue="INTERNAL">
        <webidl> &quot;INTERNAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="EXTERNAL">
        <webidl> &quot;EXTERNAL</webidl>
      </EnumValue>
    </Enum>
    <Enum name="FileSystemStorageState" id="::Filesystem::FileSystemStorageState">
      <webidl>  enum FileSystemStorageState { &quot;MOUNTED&quot;, &quot;REMOVED&quot;, &quot;UNMOUNTABLE&quot; };</webidl>
      <descriptive>
          <brief>
 Specifies the state of the storage.
          </brief>
         <description>
          <ul>
            <li>
MOUNTED - The device is mounted and can be browsed.            </li>
            <li>
REMOVED - The device has been removed. This states applies only to external drives.            </li>
            <li>
UNMOUNTABLE - The device cannot be mounted due to an error.            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <EnumValue stringvalue="MOUNTED">
        <webidl> &quot;MOUNTED</webidl>
      </EnumValue>
      <EnumValue stringvalue="REMOVED">
        <webidl> &quot;REMOVED</webidl>
      </EnumValue>
      <EnumValue stringvalue="UNMOUNTABLE">
        <webidl> &quot;UNMOUNTABLE</webidl>
      </EnumValue>
    </Enum>
    <Interface name="FileSystemManagerObject" id="::Filesystem::FileSystemManagerObject">
      <webidl>  [NoInterfaceObject] interface FileSystemManagerObject {
    readonly attribute <ref>FileSystemManager</ref> filesystem;
  };</webidl>
      <descriptive>
          <brief>
 The FileSystemManagerObject interface defines what is instantiated by the Tizen object.
          </brief>
         <description>
          <p>
There is a <em>tizen.filesystem </em>object that allows accessing the functionality of the Filesystem API.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="filesystem" id="::Filesystem::FileSystemManagerObject::filesystem">
        <webidl>    readonly attribute <ref>FileSystemManager</ref> filesystem;</webidl>
        <Type name="FileSystemManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="FileSystemManagerObject">
      <webidl>  <ref>Tizen</ref> implements <ref>FileSystemManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="FileSystemManager" id="::Filesystem::FileSystemManager">
      <webidl>  [NoInterfaceObject] interface FileSystemManager {
    readonly attribute long maxPathLength;

    void resolve(DOMString location,
                 <ref>FileSuccessCallback</ref> onsuccess,
                 optional <ref>ErrorCallback</ref>? onerror,
                 optional <ref>FileMode</ref>? mode) raises(<ref>WebAPIException</ref>);

    void getStorage(DOMString label,
                    <ref>FileSystemStorageSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    void listStorages(<ref>FileSystemStorageArraySuccessCallback</ref> onsuccess,
                      optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    long addStorageStateChangeListener(<ref>FileSystemStorageSuccessCallback</ref> onsuccess,
                                       optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    void removeStorageStateChangeListener(long watchId) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The FileSystemManager interface provides access to the Filesystem API.
          </brief>
         <description>
          <p>
This manager interface exposes the Filesystem base API, and provides functionalities, such
as determining root and default locations, resolving a given location into a file handle, and registering filesystem listeners for filesystem events.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code> var documentsDir;
 function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     console.log(&quot;File Name is &quot; + files[i].name); // displays file name
   }

   var testFile = documentsDir.createFile(&quot;test.txt&quot;);

   if (testFile != null) {
     testFile.openStream(
       &quot;w&quot;,
       function(fs) {
         fs.write(&quot;HelloWorld&quot;);
         fs.close();
       }, function(e) {
         console.log(&quot;Error &quot; + e.message);
       }, &quot;UTF-8&quot;
     );
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message + &quot; occurred when listing the files in the selected folder&quot;);
 }

 tizen.filesystem.resolve(
   'documents',
   function(dir) {
     documentsDir = dir;
     dir.listFiles(onsuccess, onerror);
   }, function(e) {
     console.log(&quot;Error&quot; + e.message);
   }, &quot;rw&quot;
 );
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="maxPathLength" id="::Filesystem::FileSystemManager::maxPathLength">
        <webidl>    readonly attribute long maxPathLength;</webidl>
        <descriptive>
            <brief>
 The maximum path length limit for the current platform.
            </brief>
            <version>
 1.0
            </version>
            <Code> console.log(&quot;The maximum path length is &quot; + tizen.filesystem.maxPathLength);
 </Code>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Operation name="resolve" id="::Filesystem::FileSystemManager::resolve">
        <webidl>    void resolve(DOMString location,
                 <ref>FileSuccessCallback</ref> onsuccess,
                 optional <ref>ErrorCallback</ref>? onerror,
                 optional <ref>FileMode</ref>? mode) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Resolves a location to a file handle after validating it.<br/>            </brief>
           <description>
            <p>
A location can contain a virtual path like '<var>documents/some_file.txt</var>'
or a file's URI '<var>file:///my_strange_path/some_file.png</var>'.
            </p>
            <p>
The list of root locations that must be supported by a compliant implementation are:
            </p>
            <ul>
              <li>
documents - The default folder in which text documents (such as pdf, doc...) are stored by default in a device. For example, in some platforms it corresponds to the &quot;My Documents&quot; folder.              </li>
              <li>
images - The default folder in which still images, like pictures (in formats including jpg, gif, png, etc.), are stored in the device by default. For example, in some platforms it corresponds to the &quot;My Images&quot; folder.              </li>
              <li>
music - The default folder in which sound clips (in formats including mp3, aac, etc.) are stored in the device by default. For example, in some platforms it corresponds to the &quot;My Music&quot; folder.              </li>
              <li>
videos - The default folder in which video clips (in formats including avi, mp4, etc.) are stored in the device by default. For example, in some platforms it corresponds to the &quot;My Videos&quot; folder.              </li>
              <li>
downloads - The default folder in which downloaded files (from sources including browser, e-mail client, etc.) are stored by default in the device. For example, in some platforms it corresponds to the &quot;Downloads&quot; folder.              </li>
              <li>
ringtones: The default folder in which ringtones (such as mp3, etc) are stored in the device.              </li>
              <li>
camera : The default folder in which pictures and videos taken by a device are stored.              </li>
              <li>
wgt-package - The read-only folder to which the content of a widget file is extracted.              </li>
              <li>
wgt-private - The private folder in which a widget stores its information. This folder must be accessible only to the same widget and other widgets or applications must not be able to access the stored information.              </li>
              <li>
wgt-private-tmp - Temporary, the private folder in which a widget can store data that is available during a widget execution cycle. Content of this folder can be removed from this directory when the widget is closed or the Web Runtime is restarted. This folder must be accessible only to the same widget and other widgets or applications must not be able to access it.              </li>
            </ul>
            <p>
The <em>mode </em>parameter specifies whether the resulting <em>File </em>object has read-only access (&quot;r&quot; access), read and write access (&quot;rw&quot; access), append access (&quot;a&quot; access), or write access (&quot;w&quot; access) to the root location containing directory tree.
Permission for the requested access is obtained from the security framework. Once the resulting <em>File </em>object has access, access is inherited by any other <em>File </em>objects that are derived from this instance without any further reference to the security framework, as noted in descriptions of certain methods of <em>File</em>.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.
For example, the mode is &quot;w&quot; for the read-only virtual roots (wgt-package and ringtones).              </li>
              <li>
NotFoundError - If the location input argument does not correspond to a valid location.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <remark>
 <var>camera</var> location is supported since Tizen 2.3. If a device does not support camera, NotSupportedError will be thrown.
            </remark>
            <Code> tizen.filesystem.resolve(
   'images',
   function(dir) {
     console.log(&quot;Mount point Name is &quot; +  dir.path);
   }, function(e) {
     console.log(&quot;Error: &quot; + e.message);
   }, &quot;r&quot;
 );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="location">
            <descriptive>
                <description><p>
  Location to resolve that can be a virtual path or file URI
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when the location has been successfully resolved, passing the newly created <em>File </em>object
                </p></description>
            </descriptive>
            <Type name="FileSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
   Callback method to be invoked when an error has occurred
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="mode">
            <descriptive>
                <description><p>
      Optional value to indicate the file access mode on all files and directories that can be reached from the <em>File </em>object passed to onsuccess <br/>Default value of this parameter is <var>rw</var> if absent or <var>null</var>.
                </p></description>
            </descriptive>
            <Type name="FileMode" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any of the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported (e.g. in the case of 'camera' virtual path if the device does not support camera)
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getStorage" id="::Filesystem::FileSystemManager::getStorage">
        <webidl>    void getStorage(DOMString label,
                    <ref>FileSystemStorageSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets information about a storage based on its label.<br/>For example: &quot;MyThumbDrive&quot;, &quot;InternalFlash&quot;.
            </brief>
           <description>
            <p>
The <em>onsuccess </em>method receives the data structure as an input argument containing additional information about the drive.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError - If no drive was found with the given label.              </li>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
UnknownError - If any other error occurs.               </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> function onStorage(storage) {
     // Do something
 }

 function onStorageError(e) {
 console.log(&quot;Storage not found!&quot; + e.message);
 }

 tizen.filesystem.getStorage(&quot;music&quot;, onStorage, onStorageError);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="label">
            <descriptive>
                <description><p>
     Storage label
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when the list of storage is available, passing the storage list to the callback
                </p></description>
            </descriptive>
            <Type name="FileSystemStorageSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
   Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="listStorages" id="::Filesystem::FileSystemManager::listStorages">
        <webidl>    void listStorages(<ref>FileSystemStorageArraySuccessCallback</ref> onsuccess,
                      optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Lists the available storages (both internal and external) on a device.
The onsuccess method receives a list of the data structures as input argument containing additional information about each drive found.
It can get storages that would have a label named as 'internal0', virtual roots (images, documents,...), 'removable1', 'removable2'.
'removable1' label is used to resolve sdcard and 'removable2' label is used to resolve USB host, if supported.
The vfat filesystem used to sdcard filesystem widely is not case-sensitive.
If you want to handle the file on sdcard, you need to consider case-sensitive filenames are regarded as same name.
            </brief>
           <description>
            <p>
Labels can differ depending on platform implementation.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> function alertForCorruptedRemovableDrives(storages) {
     for (var i = 0; i &#60; storages.length; i++) {
         if (storages[i].type != &quot;EXTERNAL&quot;)
             continue;
         if (storages[i].state == &quot;UNMOUNTABLE&quot;)
             console.log(&quot;External drive &quot; + storages[i].label + &quot; is corrupted.&quot;);
     }
 }

 tizen.filesystem.listStorages(alertForCorruptedRemovableDrives);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when a list of storage is available, and passing the storage list to the callback
                </p></description>
            </descriptive>
            <Type name="FileSystemStorageArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
   Callback method to be invoked when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="addStorageStateChangeListener" id="::Filesystem::FileSystemManager::addStorageStateChangeListener">
        <webidl>    long addStorageStateChangeListener(<ref>FileSystemStorageSuccessCallback</ref> onsuccess,
                                       optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds a listener to subscribe to notifications when a change in storage state occurs.
            </brief>
           <description>
            <p>
The most common usage for this method is to watch for any additions and removals of external storages.
            </p>
            <p>
When executed, it returns a subscription identifier that identifies the watch operation. After returning the identifier, the watch operation is started asynchronously. The onsuccess method will be invoked every time a storage state changes. If the attempt fails, the onerror if present will be invoked with the relevant error type.
            </p>
            <p>
The watch operation must continue until the removeStorageStateChangeListener() method is called with the corresponding subscription identifier.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var watchID;
 function onStorageStateChanged(storage) {
     if (storage.state == &quot;MOUNTED&quot;)
         console.log(&quot;Storage &quot; + storage.label + &quot; was added!&quot;);
 }

 watchID = tizen.filesystem.addStorageStateChangeListener(onStorageStateChanged);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long Subscription identifier
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when any change is made to storage state
                </p></description>
            </descriptive>
            <Type name="FileSystemStorageSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
   Callback method to be invoked when an error occurs during the watch process
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removeStorageStateChangeListener" id="::Filesystem::FileSystemManager::removeStorageStateChangeListener">
        <webidl>    void removeStorageStateChangeListener(long watchId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes a listener to unsubscribe from a storage watch operation.
            </brief>
           <description>
            <p>
If the <em>watchId </em>argument is valid and corresponds to a subscription already in place, the watch process will be stopped and no further callbacks will be invoked.
Otherwise, the method call has no effect.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var watchID;
 function onStorageStateChanged(storage) {
     if (storage.state == &quot;MOUNTED&quot;)
         console.log(&quot;Storage &quot; + storage.label + &quot; was added!&quot;);
     tizen.filesystem.removeStorageStateChangeListener(watchID);
 }

 watchID = tizen.filesystem.addStorageStateChangeListener(onStorageStateChanged);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="watchId">
            <descriptive>
                <description><p>
 Subscription identifier
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="FileSystemStorage" id="::Filesystem::FileSystemStorage">
      <webidl>  [NoInterfaceObject] interface FileSystemStorage {
    readonly attribute DOMString label;

    readonly attribute <ref>FileSystemStorageType</ref> type;

    readonly attribute <ref>FileSystemStorageState</ref> state;
  };</webidl>
      <descriptive>
          <brief>
 The FileSystemStorage interface gives additional information about a storage, such as if the device is mounted, if it is a removable drive or not, or the device's name.
          </brief>
         <description>
          <p>
To retrieve the mount point, the resolve() method should be used using the label as argument.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="label" id="::Filesystem::FileSystemStorage::label">
        <webidl>    readonly attribute DOMString label;</webidl>
        <descriptive>
            <brief>
 The storage name.
            </brief>
           <description>
            <p>
This attribute is used as an input for methods such as getStorage() and also used as <em>location</em> parameter for File.resolve() and FileSystemManager.resolve().
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="type" id="::Filesystem::FileSystemStorage::type">
        <webidl>    readonly attribute <ref>FileSystemStorageType</ref> type;</webidl>
        <descriptive>
            <brief>
 The storage type as internal or external.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="FileSystemStorageType"/>
      </Attribute>
      <Attribute readonly="readonly" name="state" id="::Filesystem::FileSystemStorage::state">
        <webidl>    readonly attribute <ref>FileSystemStorageState</ref> state;</webidl>
        <descriptive>
            <brief>
 The storage state as mounted or not.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="FileSystemStorageState"/>
      </Attribute>
    </Interface>
    <Interface name="File" id="::Filesystem::File">
      <webidl>  [NoInterfaceObject] interface File {
    readonly attribute <ref>File</ref>? parent;

    readonly attribute boolean readOnly;

    readonly attribute boolean isFile;

    readonly attribute boolean isDirectory;

    readonly attribute Date? created;

    readonly attribute Date? modified;

    readonly attribute DOMString path;

    readonly attribute DOMString name;

    readonly attribute DOMString fullPath;

    readonly attribute unsigned long long fileSize;

    readonly attribute long length;

    DOMString toURI() raises(<ref>WebAPIException</ref>);

    void listFiles(<ref>FileArraySuccessCallback</ref> onsuccess,
                   optional <ref>ErrorCallback</ref>? onerror,
                   optional <ref>FileFilter</ref>? filter) raises(<ref>WebAPIException</ref>);

    void openStream(<ref>FileMode</ref> mode,
                    <ref>FileStreamSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror,
                    optional DOMString? encoding) raises(<ref>WebAPIException</ref>);

    void readAsText(<ref>FileStringSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror,
                    optional DOMString? encoding) raises(<ref>WebAPIException</ref>);

    void copyTo(DOMString originFilePath,
                DOMString destinationFilePath,
                boolean overwrite,
                optional <ref>SuccessCallback</ref>? onsuccess,
                optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    void moveTo(DOMString originFilePath,
                DOMString destinationFilePath,
                boolean overwrite,
                optional <ref>SuccessCallback</ref>? onsuccess,
                optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    <ref>File</ref> createDirectory(DOMString dirPath) raises(<ref>WebAPIException</ref>);

    <ref>File</ref> createFile(DOMString relativeFilePath) raises(<ref>WebAPIException</ref>);

    <ref>File</ref> resolve(DOMString filePath) raises(<ref>WebAPIException</ref>);

    void deleteDirectory(DOMString directoryPath,
                         boolean recursive,
                         optional <ref>SuccessCallback</ref>? onsuccess,
                         optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);

    void deleteFile(DOMString filePath,
                    optional <ref>SuccessCallback</ref>? onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The File interface represents the file abstraction in use.
A file handle represents a file if the <em>isFile </em>property is <var>true</var>,
and if the <em>isFile </em>property is <var>false</var>, the file handle represents a directory.
If a file handle represents a directory, it can address files and directories.
          </brief>
         <description>
          <p>
The file object permissions for the file object location and tree rooted
at that location depends upon the mode defined in the resolve method.
When a File object creates a child File object,
the new File object inherits its access rights from
the parent object without any reference to the security framework, as
noted in certain methods of File.
          </p>
          <p>
A file handle representing a file can be opened for I/O operations,
such as reading and writing.
          </p>
          <p>
A file handle representing a directory can be used for listing all
files and directories rooted as the file handle location.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code> function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     // alerts each name of dir's contents
     console.log(files[i].name);
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message +
               &quot; occurred when listing the files in the selected folder&quot;);
 }

 // list directory contents
 dir.listFiles(onsuccess, onerror);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="parent" id="::Filesystem::File::parent">
        <webidl>    readonly attribute <ref>File</ref>? parent;</webidl>
        <descriptive>
            <brief>
 The parent directory handle.
            </brief>
           <description>
            <p>
This attribute is set to<var>null</var> if there is no parent directory. This also implies that this directory represents a root location.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> // list directory contents
 dir.listFiles(onsuccess, onerror);

 function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     // prints the file parent, should contain the
     // same value for all the files in the loop
     console.log(&quot;All the files should have the same parent &quot; +
                 files[i].parent);
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message +
               &quot; occurred when listing the files in the selected folder&quot;);
 }
 </Code>
        </descriptive>
        <Type name="File" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="readOnly" id="::Filesystem::File::readOnly">
        <webidl>    readonly attribute boolean readOnly;</webidl>
        <descriptive>
            <brief>
 The file/directory access state in the filesystem.
            </brief>
           <description>
            <p>
This attribute is set to:
            </p>
            <ul>
              <li>
<var>true</var> - if object has read-only access at its location.              </li>
              <li>
<var>false</var> - if object has write access at its location.              </li>
            </ul>
            <p>
This attribute represents the actual state of a file or directory in the filesystem. Its value is not affected by the mode used in FileSystemManager.resolve() that was used to create the <em>File </em>object from which this <em>File </em>object was obtained.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> // lists directory contents
 dir.listFiles(onsuccess, onerror);

 function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     if (files[i].readOnly)
       console.log(&quot;Cannot write to file &quot; + files[i].name);
     else
       console.log(&quot;Can write to file &quot; + files[i].name);
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message + &quot; occurred when listing the files in the selected folder&quot;);
 }
 </Code>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="isFile" id="::Filesystem::File::isFile">
        <webidl>    readonly attribute boolean isFile;</webidl>
        <descriptive>
            <brief>
 The flag indicating whether it is a file.
            </brief>
           <description>
            <p>
This attribute can have the following values:
            </p>
            <ul>
              <li>
<var>true</var> if this handle is a file              </li>
              <li>
<var>false</var> if this handle is a directory              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="isDirectory" id="::Filesystem::File::isDirectory">
        <webidl>    readonly attribute boolean isDirectory;</webidl>
        <descriptive>
            <brief>
 The flag indicating whether it is a directory.
            </brief>
           <description>
            <p>
This attribute can have the following values:
            </p>
            <ul>
              <li>
<var>true</var> if this handle is a directory              </li>
              <li>
<var>false</var> if this handle is a file              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="created" id="::Filesystem::File::created">
        <webidl>    readonly attribute Date? created;</webidl>
        <descriptive>
            <brief>
 The timestamp when a file is first created in the filesystem.
            </brief>
           <description>
            <p>
This timestamp is equivalent to the timestamp when a call to createFile() succeeds.
            </p>
            <p>
If the platform does not support this attribute, it will
be <var>null</var>.
            </p>
            <p>
It is unspecified and platform-dependent if the creation
timestamp changes when a file is moved.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="Date" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="modified" id="::Filesystem::File::modified">
        <webidl>    readonly attribute Date? modified;</webidl>
        <descriptive>
            <brief>
 The timestamp when the most recent modification is made to a file, usually when the last write operation succeeds.
            </brief>
           <description>
            <p>
Opening a file for reading does not change the modification timestamp.
            </p>
            <p>
If the platform does not support this attribute, it will be <em>null</em>.
            </p>
            <p>
It is unspecified and platform-dependent if the modified
timestamp changes when a file is moved.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> console.log(file.modified); // displays the modification timestamp
 </Code>
        </descriptive>
        <Type type="Date" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="path" id="::Filesystem::File::path">
        <webidl>    readonly attribute DOMString path;</webidl>
        <descriptive>
            <brief>
 The path of a file after excluding its file name.
            </brief>
           <description>
            <p>
It begins with the name of the root containing the file, followed by the path, including the directory containing the file, but excluding the file name.
            </p>
            <p>
Except in some special cases of the File representing the root itself, the last
character is always '/'.
            </p>
            <p>
For example, if a file is located at music/ramones/volume1/RockawayBeach.mp3,
the path is music/ramones/volume1/.
            </p>
            <p>
For example, if a directory is located at music/ramones/volume1, the path is
music/ramones/.
            </p>
            <p>
For the virtual roots, the path is same as the name of the virtual root.
For example, if the root is music, then the path is music. If the root is documents, then the path is documents.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> console.log(file.path); // should be 'music/' if the file is music/foo.mp3
 </Code>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="name" id="::Filesystem::File::name">
        <webidl>    readonly attribute DOMString name;</webidl>
        <descriptive>
            <brief>
 The file name after excluding the root name and any path components.
            </brief>
           <description>
            <p>
This is the name of this file, excluding the root name and any other path components.
            </p>
            <p>
For example, if a file is located at
music/ramones/volume1/RockawayBeach.mp3, the <em>name </em> is 'RockawayBeach.mp3'.
            </p>
            <p>
For example, if a directory is located at music/ramones/volume1, the
<em>name </em> is be 'volume1'.
            </p>
            <p>
For the special case of the root itself, the <em>name </em> is an empty string.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> // should be foo.mp3 if the file path is music/foo.mp3
 console.log(file.name);
 </Code>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="fullPath" id="::Filesystem::File::fullPath">
        <webidl>    readonly attribute DOMString fullPath;</webidl>
        <descriptive>
            <brief>
 The full path of a file.
            </brief>
           <description>
            <p>
It begins with the name of the root containing the file,
and including the name of the file or directory itself.
            </p>
            <p>
For instance, if the RockawayBeach.mp3 file is located at music/ramones/volume1/, then the <em>fullPath </em>is music/ramones/volume1/RockawayBeach.mp3.
            </p>
            <p>
For a directory, if the volume1 directory is located at music/ramones/, then the <em>fullPath </em>is music/ramones/volume1.
            </p>
            <p>
For the special case of the root itself, if the root is music, then the <em>fullPath </em>is music.
            </p>
            <p>
The <em>fullPath </em>is always equal to path + name.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code>  // should be music/track1.mp3 if the file is music/track1.mp3
 console.log(file.fullPath);
 </Code>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="fileSize" id="::Filesystem::File::fileSize">
        <webidl>    readonly attribute unsigned long long fileSize;</webidl>
        <descriptive>
            <brief>
 The size of this file, in bytes.
            </brief>
           <description>
            <p>
If an attempt to read this attribute for a directory is made, <var>undefined</var> is returned. To retrieve the number of files and directories contained in the directory, use the <em>length </em>attribute.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> // displays the file size
 console.log(file.fileSize);
 </Code>
        </descriptive>
        <Type type="unsigned long long"/>
      </Attribute>
      <Attribute readonly="readonly" name="length" id="::Filesystem::File::length">
        <webidl>    readonly attribute long length;</webidl>
        <descriptive>
            <brief>
 The number of files and directories contained in a file handle.
            </brief>
           <description>
            <p>
If an attempt to read this attribute for a file is made, <var>undefined</var> is returned. To retrieve the size of a file, use the <em>fileSize </em>attribute.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> // '3' if the directory contains two files and one sub-directory
 console.log(file.length);
 </Code>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Operation name="toURI" id="::Filesystem::File::toURI">
        <webidl>    DOMString toURI() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Returns a URI for a file to identify an entry (such as using it as the src attribute on an HTML img element).
The URI has no specific expiration, it should be valid at least as long as the file exists.
            </brief>
           <description>
            <p>
If that URI corresponds to any of the public virtual roots (that is
images, videos, music, documents, and downloads) the URI
must be globally unique and could be used by any widget.
            </p>
            <p>
If that URI corresponds to a file located in any a widget's private areas (such as wgt-package, wgt-private, wgt-private-tmp),
the generated URI must be unique for that file and for the widget making the request (such as including some derived from the widget ID in the URI).
These URIs must not be accessible to other widgets, apart from the one invoking this method.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> tizen.filesystem.resolve('music/ramones/RockawayBeach.mp3', function(file) {
   var audio = new Audio(file.toURI());
   audio.play();
   console.log(file.toURI());
 });
 </Code>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString URI that identifies the file or <var>null </var>if an error occurs
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurred.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="listFiles" id="::Filesystem::File::listFiles">
        <webidl>    void listFiles(<ref>FileArraySuccessCallback</ref> onsuccess,
                   optional <ref>ErrorCallback</ref>? onerror,
                   optional <ref>FileFilter</ref>? filter) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Lists all files in a directory.
            </brief>
           <description>
            <p>
The list of files is passed as a File[] in onsuccess() and contains directories and files. However, the directories &quot;.&quot; and &quot;..&quot; must not be returned. Each <em>File </em>object that is part of the array must inherit all the access rights (that is, one of the values in FileMode) from the <em>File </em>object in which this method is invoked.
            </p>
            <p>
If the filter is passed and contains valid values, only those directories and files in the directory that match the filter criteria specified in the <em>FileFilter </em>interface must be returned in the onsuccess() method. If no filter is passed, the filter is <var>null </var>or <var>undefined</var>, or the filter contains invalid values, the implementation must return the full list of files in the directory.
            </p>
            <p>
If the directory does not contain any files or directories, or the filter criteria does not matched with any files or directories, the onsuccess() is invoked with an empty array.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
IOError - If the operation is launched on a file (not a directory).              </li>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> function onsuccess(files) {
   console.log(&quot;There are &quot; + files.length  + &quot; in the selected folder&quot;);
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message + &quot; occurred when listing the files in the selected folder&quot;);
 }

 tizen.filesystem.resolve(
     &quot;documents&quot;,
     function(dir) {
       dir.listFiles(onsuccess, onerror);
     }, function(e) {
       console.log(&quot;Error &quot; + e.message);
     }, &quot;r&quot;
 );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when the list operation has been successfully completed
                </p></description>
            </descriptive>
            <Type name="FileArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
   Callback method to be invoked when an error has occurred
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="filter">
            <descriptive>
                <description><p>
    Criteria to restrict the listed files
                </p></description>
            </descriptive>
            <Type name="FileFilter" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="openStream" id="::Filesystem::File::openStream">
        <webidl>    void openStream(<ref>FileMode</ref> mode,
                    <ref>FileStreamSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror,
                    optional DOMString? encoding) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Opens the file in the given mode supporting a specified encoding.
            </brief>
           <description>
            <p>
This operation is performed asynchronously. If the file is opened successfully, the onsuccess() method is invoked with a <em>FileStream</em> that can be used for reading and writing the file, depending on the mode. The returned <em>FileStream </em>instance includes a file pointer, which represents the current position in the file. The file pointer, by default, is at the start of the file, except in the case of opening a file in append (&quot;a&quot;) mode, in which case the file pointer points to the end of the file.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contains an invalid value.              </li>
              <li>
IOError - The operation is launched on a directory (not a file), the file is not valid or it does not exist.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> var documentsDir;
 function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     console.log(&quot;File Name is &quot; + files[i].name); // displays file name
   }

   var testFile = documentsDir.createFile(&quot;test.txt&quot;);
   if (testFile != null) {
     testFile.openStream(
         &quot;w&quot;,
         function(fs) {
           fs.write(&quot;HelloWorld&quot;);
           fs.close();
         }, function(e) {
           console.log(&quot;Error &quot; + e.message);
         }, &quot;UTF-8&quot;
     );
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message + &quot; occurred when listing the files in the selected folder&quot;);
 }

 tizen.filesystem.resolve(
     'documents',
     function(dir) {
       documentsDir = dir; dir.listFiles(onsuccess,onerror);
     }, function(e) {
       console.log(&quot;Error&quot; + e.message);
     }, &quot;rw&quot;
 );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="mode">
            <descriptive>
                <description><p>
      Mode in which the file is opened<br/><b>&quot;r&quot;</b> for reading<br/><b>&quot;a&quot;</b> for appending<br/><b>&quot;w&quot;</b> for [over]writing<br/><b>&quot;rw&quot;</b> for reading and writing<br/>                </p></description>
            </descriptive>
            <Type name="FileMode"/>
          </Argument>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when a file has been opened
                </p></description>
            </descriptive>
            <Type name="FileStreamSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
   Callback method to be invoked when an error has occurred
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="encoding">
            <descriptive>
                <description><p>
  Encoding to use for read/write operations on the file, at least the following encodings must be supported:<br/>&quot;<a href="http://www.ietf.org/rfc/rfc2279.txt">UTF-8</a>&quot; default encoding<br/>&quot;<a href="http://en.wikipedia.org/wiki/ISO/IEC_8859-1">ISO-8859-1</a>&quot; latin1 encoding<br/>If no encoding is passed by the developer, then the default platform encoding must be used.
                </p></description>
            </descriptive>
            <Type type="DOMString" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="readAsText" id="::Filesystem::File::readAsText">
        <webidl>    void readAsText(<ref>FileStringSuccessCallback</ref> onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror,
                    optional DOMString? encoding) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Reads the content of a file as a DOMString.
            </brief>
           <description>
            <p>
If the operation is successfully executed, the onsuccess() method is invoked and a DOMString is passed as input parameter that represents the file content in the format determined by the <em>encoding </em>parameter.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
IOError - If the operation is launched on a directory (not a file), the file is not valid, or the file does not exist.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     console.log(&quot;File Name is &quot; + files[i].name); // displays file name
     if (files[i].isDirectory == false)
       files[i].readAsText(
           function(str) {
             console.log(&quot;The file content &quot; + str);
           }, function(e) {
             console.log(&quot;Error &quot; + e.message);
           }, &quot;UTF-8&quot;
       );
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message + &quot; occurred when listing the files in the selected folder&quot;);
 }

 var documentsDir;
 tizen.filesystem.resolve(
     'documents',
     function(dir) {
       documentsDir = dir;
       dir.listFiles(onsuccess,onerror);
     }, function(e) {
       console.log(&quot;Error&quot; + e.message);
     }, &quot;rw&quot;
 );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when a file has been successfully read
                </p></description>
            </descriptive>
            <Type name="FileStringSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
   Callback method to be invoked when an error occurs while reading a file
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="encoding">
            <descriptive>
                <description><p>
  Encoding for read/write operations on a file, at least the following encodings must be supported:<br/>&quot;<a href="http://www.ietf.org/rfc/rfc2279.txt">UTF-8</a>&quot; default encoding<br/>&quot;<a href="http://en.wikipedia.org/wiki/ISO/IEC_8859-1">ISO-8859-1</a>&quot; latin1 encoding<br/>If no encoding is passed by the developer, then the default platform encoding must be used.
                </p></description>
            </descriptive>
            <Type type="DOMString" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="copyTo" id="::Filesystem::File::copyTo">
        <webidl>    void copyTo(DOMString originFilePath,
                DOMString destinationFilePath,
                boolean overwrite,
                optional <ref>SuccessCallback</ref>? onsuccess,
                optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Copies (and overwrites if possible and specified) a file or a
directory from a specified location to another specified location.
            </brief>
           <description>
            <p>
The copy of the file or directory identified by the <em>originFilePath </em>parameter must be created in the path passed in the <em>destinationFilePath </em>parameter.
            </p>
            <p>
The file or directory to copy must be under the Directory from which the method is invoked, otherwise the operation must not be performed.
            </p>
            <p>
If the copy is performed successfully, the onsuccess() method is invoked.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
NotFoundError - If the <em>originFilePath </em>does not correspond to a valid file or <em>destinationPath </em>is not a valid path.              </li>
              <li>
IOError - If the file in which the copyTo() method is invoked is a file (and not a directory), <em>originFilePath </em>corresponds to a file or directory in use by another process, <em>overwrite </em>parameter is <var>false</var> and <em>destinationFilePath </em>corresponds to an existing file or directory.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var documentsDir;
 function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     if (files[i].isDirectory == false) {
       documentsDir.copyTo(files[i].fullPath,
                           &quot;images/backup/&quot; + files[i].name,
                           false,
                           function() {console.log(&quot;file copied&quot;);});
     }
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message +
               &quot; occurred when listing the files in the selected folder&quot;);
 }

 tizen.filesystem.resolve(
     'documents',
     function(dir) {
       documentsDir = dir;
       dir.listFiles(onsuccess, onerror);
     }, function(e) {
       console.log(&quot;Error&quot; + e.message);
     }, &quot;rw&quot;
 );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="originFilePath">
            <descriptive>
                <description><p>
      Origin full virtual file or directory path and it must be under the current directory
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="destinationFilePath">
            <descriptive>
                <description><p>
 New full virtual file path or directory path
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="overwrite">
            <descriptive>
                <description><p>
           Attribute to determine whether overwriting is allowed or not <br/>If set to <var>true</var>, it enforces overwriting an existing file.
                </p></description>
            </descriptive>
            <Type type="boolean"/>
          </Argument>
          <Argument optional="optional" name="onsuccess">
            <descriptive>
                <description><p>
           Callback method to be invoked when the file has been copied
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
             Callback method to be invoked when an error has occurred
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="moveTo" id="::Filesystem::File::moveTo">
        <webidl>    void moveTo(DOMString originFilePath,
                DOMString destinationFilePath,
                boolean overwrite,
                optional <ref>SuccessCallback</ref>? onsuccess,
                optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Moves (and overwrites if possible and specified) a file or a directory from a specified location to another.
This operation is different from instantiating copyTo() and then deleting the original file, as on certain platforms, this operation does not require extra disk space.
            </brief>
           <description>
            <p>
The file or directory identified by the <em>originFilePath </em>parameter is moved to the path passed in the <em>destinationFilePath </em>parameter.
            </p>
            <p>
The file to move must be under the directory from which the method is invoked, else the operation can not be performed.
            </p>
            <p>
If the file or directory is moved successfully, the onsuccess() method is invoked.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
NotFoundError - If <em>originFilePath </em>does not correspond to a valid file or <em>destinationPath </em>is not a valid path.              </li>
              <li>
IOError - If the <em>File </em>in which the moveTo() method is invoked is a file (not a directory), <em>originFilePath </em>corresponds to a file or directory in use by another process, overwrite parameter is <var>false</var> and <em>destinationFilePath </em>corresponds to an existing file or directory.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var documentsDir;
 function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     if (files[i].isDirectory == false) {
       documentsDir.moveTo(files[i].fullPath,
                           &quot;images/newFolder/&quot; + files[i].name,
                           false,
                           function() {console.log(&quot;file moved&quot;);});
     }
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message +
               &quot; occurred during listing the files in the selected folder&quot;);
 }

 tizen.filesystem.resolve(
     'documents',
     function(dir) {
       documentsDir = dir;
       dir.listFiles(onsuccess, onerror);
     }, function(e) {
       console.log(&quot;Error&quot; + e.message);
     }, &quot;rw&quot;
 );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="originFilePath">
            <descriptive>
                <description><p>
      Origin full virtual file or directory path, and it must be under the current directory
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="destinationFilePath">
            <descriptive>
                <description><p>
 New full virtual file path or directory path
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="overwrite">
            <descriptive>
                <description><p>
           Flag indicating whether to overwrite an existing file.<br/>When set to <var>true</var>, the files can be overwritten.
                </p></description>
            </descriptive>
            <Type type="boolean"/>
          </Argument>
          <Argument optional="optional" name="onsuccess">
            <descriptive>
                <description><p>
           Callback method to be invoked when the file has been moved
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
             Callback method to be invoked when an error has occurred
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="createDirectory" id="::Filesystem::File::createDirectory">
        <webidl>    <ref>File</ref> createDirectory(DOMString dirPath) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Creates a new directory.
            </brief>
           <description>
            <p>
A new directory will be created relative to the current
directory that this operation is performed on. The implementation will attempt to
create all necessary sub-directories specified in the dirPath, as well. The use of &quot;.&quot;
or &quot;..&quot; in path components is not supported.
            </p>
            <p>
This operation can only be performed on file handlers that represent a directory (that is, <em>isDirectory</em> == <var>true</var>).
            </p>
            <p>
If the directory is successfully created, it will be returned.
            </p>
            <p>
In case the directory cannot be created, an error must be thrown with the appropriate error type.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var dir; //Directory object obtained from filesystem API
 var newDir = dir.createDirectory(&quot;newDir&quot;);
 var anotherNewDir = dir.createDirectory(&quot;newDir1/subNewDir1&quot;);
 </Code>
        </descriptive>
        <Type name="File">
          <descriptive>
              <description><p>
 File File handle of the new directory
The new <em>File </em>object has &quot;rw&quot; access rights, as it inherits this from the <em>File </em>object on which the createDirectory() method is called.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="dirPath">
            <descriptive>
                <description><p>
 Relative directory path, and it only contains characters supported by the underlying filesystem
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type IOError, if the dirPath already exists,  if the file in which the createDirectory() method is invoked is a file (and not a directory).
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the dirPath does not contain a valid path.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="createFile" id="::Filesystem::File::createFile">
        <webidl>    <ref>File</ref> createFile(DOMString relativeFilePath) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Creates a empty new file in a specified location that is relative to the directory indicated by current <em>File</em> object's <em>path</em> attribute.
            </brief>
           <description>
            <p>
The use of &quot;.&quot; or &quot;..&quot; in path components is not supported. This operation can only be performed on file handlers that represent a directory (that is, <em>isDirectory </em>== <var>true</var>).
            </p>
            <p>
If the file is successfully created, a file handler must be returned by this method.
            </p>
            <p>
In case the file cannot be created, an error must be thrown with the appropriate error type.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var newFile = dir.createFile(&quot;newFilePath&quot;);
 </Code>
        </descriptive>
        <Type name="File">
          <descriptive>
              <description><p>
 File File handle for the new empty file
The new <em>File </em>object has &quot;rw&quot; access rights, as it inherits this from the <em>File <em>object on which the createFile() method is
called.
</em></em>              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="relativeFilePath">
            <descriptive>
                <description><p>
 New file path and it should only contain characters supported by the underlying Filesystem
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type IOError, if the filePath already exists, if the <em>File </em>in which the createFile() method is invoked is a file (not a directory).
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the filePath contains an invalid value.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="resolve" id="::Filesystem::File::resolve">
        <webidl>    <ref>File</ref> resolve(DOMString filePath) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Resolves an existing file or directory relative to the current directory this operation is performed on, and returns a file handle for it.
            </brief>
           <description>
            <p>
The filePath is not allowed to contain the &quot;.&quot; or &quot;..&quot; directories.
            </p>
            <p>
The encoding of file paths is <a href="http://www.ietf.org/rfc/rfc2279.txt">UTF-8</a>.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> var file;
 // Resolves helloWorld.doc file that is located in the
 // documents root location
 tizen.filesystem.resolve(
   'documents',
   function(dir) { file = dir.resolve(&quot;helloWorld.doc&quot;);},
   function(e) { console.log(&quot;Error&quot; + e.message);},
   &quot;rw&quot;);
 </Code>
        </descriptive>
        <Type name="File">
          <descriptive>
              <description><p>
 File File handle of the file
The new <em>File </em>object inherits its access rights from the <em>File </em>object on which this resolve() method is called.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="filePath">
            <descriptive>
                <description><p>
 Relative file/directory path/file URI to resolve
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the file path contains an invalid value.
                </p></description>
                <description><p>
 with error type IOError, if the method is executed in a <em>File </em>object that does not represent a directory (that is, <em>isDirectory </em>attribute is <var>false</var>).
                </p></description>
                <description><p>
 with error type NotFoundError, if a file does not exist for the passed file path.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="deleteDirectory" id="::Filesystem::File::deleteDirectory">
        <webidl>    void deleteDirectory(DOMString directoryPath,
                         boolean recursive,
                         optional <ref>SuccessCallback</ref>? onsuccess,
                         optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Deletes a specified directory and directory tree if specified.
            </brief>
           <description>
            <p>
This method attempts to asynchronously delete a directory or directory tree under the current directory.
            </p>
            <p>
If the <em>recursive </em>parameter is set to <var>true</var>, all the directories and files under the specified directory must be deleted. If the <em>recursive </em>parameter is set to <var>false</var>, the directory is only deleted if it is empty, otherwise an IOError error type will be passed in onerror().
            </p>
            <p>
If the deletion is performed successfully, the onsuccess() is invoked.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
NotFoundError -If the passed directory does not correspond to a valid directory.              </li>
              <li>
IOError - If the <em>File </em>in which the delete method is invoked is a file (and not a directory), the directory is in use by another process or the directory is not empty and <em>recursive </em>argument is <var>false</var>.<br/>This code is also used if a recursive deletion partially fails and any data deleted so far cannot be recovered. This may occur due to the lack of filesystem permissions or if any directories or files are already opened by other processes.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var documentsDir;
 function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     if (files[i].isDirectory) {
       documentsDir.deleteDirectory(
           files[i].fullPath,
           false,
           function() {
             console.log(&quot;Directory Deleted&quot;);
           }, function(e) {
             console.log(&quot;Error&quot; + e.message);
           });
     }
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message + &quot; occurred when listing the files in the selected folder&quot;);
 }

 tizen.filesystem.resolve(
     'documents',
     function(dir) {
       documentsDir = dir;
       dir.listFiles(onsuccess,onerror);
     }, function(e) {
       console.log(&quot;Error&quot; + e.message);
     }, &quot;rw&quot;
 );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="directoryPath">
            <descriptive>
                <description><p>
 Full virtual path to the directory to delete (must be under the current one)
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="recursive">
            <descriptive>
                <description><p>
     Flag indicating whether the deletion is recursive or not <br/>When set to <var>true</var> recursive deletion is allowed. Also, this function deletes
all data in all subdirectories and so needs to be used with caution.
                </p></description>
            </descriptive>
            <Type type="boolean"/>
          </Argument>
          <Argument optional="optional" name="onsuccess">
            <descriptive>
                <description><p>
     Callback method to be invoked when a directory is successfully deleted
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
       Callback method to be invoked when an error has occurred
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="deleteFile" id="::Filesystem::File::deleteFile">
        <webidl>    void deleteFile(DOMString filePath,
                    optional <ref>SuccessCallback</ref>? onsuccess,
                    optional <ref>ErrorCallback</ref>? onerror) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Deletes a specified file.<br/>This function attempts to asynchronously delete a file under the current directory.
            </brief>
           <description>
            <p>
If the deletion is performed successfully, the onsuccess() is invoked.
            </p>
            <p>
The ErrorCallback is launched with these error types:
            </p>
            <ul>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
              <li>
NotFoundError - If the file does not correspond to a valid file.              </li>
              <li>
IOError - If the file in which the delete() method is invoked is a file (not a directory), the file is in use by another process, or there is no permission in the file system.              </li>
              <li>
UnknownError - If any other error occurs.              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> function onsuccess(files) {
   for (var i = 0; i &#60; files.length; i++) {
     if (!files[i].isDirectory) {
       documentsDir.deleteFile(
           files[i].fullPath,
           function() {
             console.log(&quot;File Deleted&quot;);
           }, function(e) {
             console.log(&quot;Error&quot; + e.message);
           });
     }
   }
 }

 function onerror(error) {
   console.log(&quot;The error &quot; + error.message + &quot; occurred when listing the files in the selected folder&quot;);
 }

 var documentsDir;
 tizen.filesystem.resolve(
   'documents',
   function(dir) {
     documentsDir = dir;
     dir.listFiles(onsuccess,onerror);
   }, function(e) {
     console.log(&quot;Error&quot; + e.message);
   }, &quot;rw&quot;
 );
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="filePath">
            <descriptive>
                <description><p>
  Full virtual path to the file to delete (must be under the current directory)
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument optional="optional" name="onsuccess">
            <descriptive>
                <description><p>
 Callback method to be invoked when the file is successfully deleted
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="onerror">
            <descriptive>
                <description><p>
   Callback method to be invoked when an error has occurred
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Dictionary name="FileFilter" id="::Filesystem::FileFilter">
      <webidl>  dictionary FileFilter {
    DOMString name;

    Date startModified;

    Date endModified;

    Date startCreated;

    Date endCreated;
  };</webidl>
      <descriptive>
          <brief>
 The dictionary that defines attributes to filter the items returned by the listFiles() method.
          </brief>
         <description>
          <p>
When this dictionary is passed in the listFiles() method, the result-set of the listFiles() method must only contain the file items entries that match the attribute values of the filter.
          </p>
          <p>
A file item only matches the <em>FileFilter </em>object if all the attributes of the file item match all the attribute values of the filter which are defined (that is, only matching values other than <var>undefined </var>or <var>null</var>). This is similar to an SQL &quot;AND&quot; operation.
          </p>
          <p>
An attribute of the file entry matches the <em>FileFilter </em>attribute value in accordance with the
following rules:
          </p>
          <ul>
            <li>
For <em>FileFilter </em>attributes of type DOMString, an entry matches this value only if its corresponding attribute is an exact match. If the filter contains U+0025 'PERCENT SIGN' it is interpreted as a wildcard character and '%' matches any string of any length, including no length. If wildcards are used, the behavior is similar to the LIKE condition in SQL. To specify that a 'PERCENT SIGN' character is to be considered literally instead of interpreting it as a wildcard, developers can escape it with the backslash character (\).
The matching is not case sensitive, such as &quot;FOO&quot; matches a &quot;foo&quot; or an &quot;f%&quot; filter.
            </li>
            <li>
For File entry attributes of type Date, attributes start and end are included to allow filtering of File entries between two supplied dates. If either or both of these attributes are specified, the following rules apply:<br/>A) If both start and end dates are specified (that is, other than <var>null</var>), a File entry matches the filter if its corresponding attribute is the same as either start or end or between the two supplied dates (that is, after start and before end).<br/>B) If only the start attribute contains a value (other than <var>null</var>), a File entry matches the filter if its corresponding attribute is later than or equal to the start one.<br/>C) If only the end date contains a value (other than <var>null</var>), a file matches the filter if its corresponding attribute is earlier than or equal to the end date.
            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <DictionaryMember name="name" id="::Filesystem::FileFilter::name">
        <webidl>    DOMString name;</webidl>
        <descriptive>
            <brief>
 The File name attribute filter.
            </brief>
           <description>
            <p>
Files that have a name that corresponds with this attribute (either exactly or with the specified wildcards) match this filtering criteria.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </DictionaryMember>
      <DictionaryMember name="startModified" id="::Filesystem::FileFilter::startModified">
        <webidl>    Date startModified;</webidl>
        <descriptive>
            <brief>
 The File modified attribute filter.
            </brief>
           <description>
            <p>
Files with modified date later than this attribute or equal to it match the filtering criteria.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="Date"/>
      </DictionaryMember>
      <DictionaryMember name="endModified" id="::Filesystem::FileFilter::endModified">
        <webidl>    Date endModified;</webidl>
        <descriptive>
            <brief>
 The File modified attribute filter.
            </brief>
           <description>
            <p>
Files with modified date earlier than this attribute or equal to it match the filtering criteria.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="Date"/>
      </DictionaryMember>
      <DictionaryMember name="startCreated" id="::Filesystem::FileFilter::startCreated">
        <webidl>    Date startCreated;</webidl>
        <descriptive>
            <brief>
 The File created attribute filter.
            </brief>
           <description>
            <p>
Files with created date later than this attribute or equal to it match the filtering criteria.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="Date"/>
      </DictionaryMember>
      <DictionaryMember name="endCreated" id="::Filesystem::FileFilter::endCreated">
        <webidl>    Date endCreated;</webidl>
        <descriptive>
            <brief>
 The File created attribute filter.
            </brief>
           <description>
            <p>
Files with created date earlier than this attribute or equal to it match the filtering criteria.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="Date"/>
      </DictionaryMember>
    </Dictionary>
    <Interface name="FileStream" id="::Filesystem::FileStream">
      <webidl>  [NoInterfaceObject] interface FileStream {
    readonly attribute boolean eof;

    attribute long position setraises(<ref>WebAPIException</ref>);

    readonly attribute long bytesAvailable;

    void close();

    DOMString read(long charCount) raises(<ref>WebAPIException</ref>);

    octet[] readBytes(long byteCount) raises(<ref>WebAPIException</ref>);

    DOMString readBase64(long byteCount) raises(<ref>WebAPIException</ref>);

    void write(DOMString stringData) raises(<ref>WebAPIException</ref>);

    void writeBytes(octet[] byteData) raises(<ref>WebAPIException</ref>);

    void writeBase64(DOMString base64Data) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The FileStream interface represents a handle to a File opened for read and/or write operations.
Read and write operations are performed relative to a position attribute, which is a pointer that represents the current position in the file.
          </brief>
         <description>
          <p>
A series of read/write methods are available that permit both binary and text to be processed.
          </p>
          <p>
Once a file stream is closed, any operation attempt made on this stream results in a standard JavaScript error.
          </p>
          <p>
The read/write operations in this interface do not throw any security exceptions as the access rights are expected to be granted through the initial resolve() method or through the openStream() method of the <em>File </em>interface. Therefore, all actions performed on a successfully resolved File and FileStream are expected to succeed. This avoids successive asynchronous calls and may potentially increase application for a user.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="eof" id="::Filesystem::FileStream::eof">
        <webidl>    readonly attribute boolean eof;</webidl>
        <descriptive>
            <brief>
 The flag indicating whether the current file pointer is at the end of the file.
            </brief>
           <description>
            <p>
If set to <var>true</var>, this attribute indicates that the file pointer is at the end of the file.
            </p>
            <p>
If set to <var>false</var>, this attribute indicates that the file pointer is not at the end of the file and so it is anywhere within the file.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> if (stream.eof) {
   // file has been read completely
 }
 </Code>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute name="position" id="::Filesystem::FileStream::position">
        <webidl>    attribute long position setraises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 The flag indicating the stream position for reads/writes.
            </brief>
           <description>
            <p>
The stream position is an offset of bytes from the start of the file stream. When invoking an operation that reads or writes from the stream, the operation will take place from the byte defined by this <em>position </em>attribute. If the read or write operation is successful, the position of the stream is advanced by the number of bytes read or written. If the read/write operation is not successful, the position of the stream is unchanged.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> console.log(stream.position); // displays current stream position
 // alters current stream position to the begin of the file,
 // like seek() in C
 stream.position = 0;
 </Code>
        </descriptive>
        <Type type="long"/>
        <SetRaises>
          <RaiseException name="WebAPIException"/>
        </SetRaises>
      </Attribute>
      <Attribute readonly="readonly" name="bytesAvailable" id="::Filesystem::FileStream::bytesAvailable">
        <webidl>    readonly attribute long bytesAvailable;</webidl>
        <descriptive>
            <brief>
 The number of bytes that are available for reading from the stream.
            </brief>
           <description>
            <p>
The number of bytes available for reading is the maximum amount of bytes that can be read in the next read operation.
It corresponds to the number of bytes available after the file pointer denoted by the <em>position </em>attribute.
            </p>
            <p>
<var>-1 </var>if EOF is <var>true</var>.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> console.log(stream.bytesAvailable); // displays the available bytes to be read
 </Code>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Operation name="close" id="::Filesystem::FileStream::close">
        <webidl>    void close();</webidl>
        <descriptive>
            <brief>
 Closes this FileStream.
            </brief>
           <description>
            <p>
Flushes any pending buffered writes and closes the File. Always succeeds.
Note that pending writes might not succeed.
            </p>
           </description>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> stream.close(); // closes this stream, no subsequent access to stream allowed
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
      </Operation>
      <Operation name="read" id="::Filesystem::FileStream::read">
        <webidl>    DOMString read(long charCount) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Reads the specified number of characters from the position of the file pointer in a FileStream and returns the characters as a string.
The resulting string length might be shorter than <em>charCount </em>if EOF is <var>true</var>.
            </brief>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> var text = stream.read(file.fileSize);
 stream.close();
 </Code>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString Array of read characters as a string
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="charCount">
            <descriptive>
                <description><p>
 Number of characters being read
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type IOError, if a read error occurs, such as the bytes in the stream cannot be decoded with the encoding in use.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type SecurityError,  if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="readBytes" id="::Filesystem::FileStream::readBytes">
        <webidl>    octet[] readBytes(long byteCount) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Reads the specified number of bytes from a FileStream.
            </brief>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> // reads up to 256 bytes from the stream
 var raw = stream.readBytes(256);
 for (var i = 0; i &#60; raw.length; i++) {
   // raw[i] contains the i-th byte of the current data chunk
 }
 </Code>
        </descriptive>
        <Type type="array">
          <descriptive>
              <description><p>
 octet[] Result of read bytes as a byte (or number) array
              </p></description>
          </descriptive>
          <Type type="octet"/>
        </Type>
        <ArgumentList>
          <Argument name="byteCount">
            <descriptive>
                <description><p>
 Number of bytes to read
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type IOError, if a read error occurs.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type SecurityError, if this functionality is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="readBase64" id="::Filesystem::FileStream::readBase64">
        <webidl>    DOMString readBase64(long byteCount) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Reads the specified number of bytes from this FileStream, encoding the result in base64.
            </brief>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.read
            </privilege>
            <Code> // reads up to 256 bytes from the stream
 var base64 = stream.readBase64(256);
 </Code>
        </descriptive>
        <Type type="DOMString"/>
        <ArgumentList>
          <Argument name="byteCount">
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException"/>
        </Raises>
      </Operation>
      <Operation name="write" id="::Filesystem::FileStream::write">
        <webidl>    void write(DOMString stringData) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Writes the specified DOMString to a FileStream.
            </brief>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var text = &quot;Hello world&quot;;
 stream.write(text);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="stringData">
            <descriptive>
                <description><p>
 Actual string to write
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type IOError, if a write error occurs.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="writeBytes" id="::Filesystem::FileStream::writeBytes">
        <webidl>    void writeBytes(octet[] byteData) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Writes the specified bytes to this FileStream.
            </brief>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var bytes = in.readBytes(256);
 // writes the bytes read from in to out
 out.writeBytes(bytes);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="byteData">
            <descriptive>
                <description><p>
 Byte data array being written
                </p></description>
            </descriptive>
            <Type type="array">
              <Type type="octet"/>
            </Type>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type IOError, if a write error occurs.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="writeBase64" id="::Filesystem::FileStream::writeBase64">
        <webidl>    void writeBase64(DOMString base64Data) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Writes the result to this FileStream after converting the specified base64 DOMString to bytes.
            </brief>
            <version>
 1.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
      http://tizen.org/privilege/filesystem.write
            </privilege>
            <Code> var base64 = in.readBase64(256);
 // writes the base64 data read from in to out
 out.writeBase64(base64);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="base64Data">
            <descriptive>
                <description><p>
 The base64 data to written
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type IOError, if an error occurs during writeBase64.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the input parameter contains an invalid value
(e.g. the base64Data input parameter is not a valid Base64 sequence).
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="FileSuccessCallback" id="::Filesystem::FileSuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface FileSuccessCallback {
    void onsuccess(<ref>File</ref> file);
  };</webidl>
      <descriptive>
          <brief>
 The FileSuccessCallback interface defines file system success callback with a <em>File</em> object as input argument.
          </brief>
         <description>
          <p>
It is used in asynchronous operations, such as FileSystemManager.resolve(), copying, moving, and deleting files.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Filesystem::FileSuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>File</ref> file);</webidl>
        <descriptive>
            <brief>
 Called when the asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="file">
            <descriptive>
                <description><p>
 File resulting from the asynchronous call
                </p></description>
            </descriptive>
            <Type name="File"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="FileSystemStorageArraySuccessCallback" id="::Filesystem::FileSystemStorageArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface FileSystemStorageArraySuccessCallback {
    void onsuccess(<ref>FileSystemStorage</ref>[] storages);
  };</webidl>
      <descriptive>
          <brief>
 The FileSystemStorageArraySuccessCallback callback interface specifies a success callback with an array of FileSystemStorage objects as input argument.
          </brief>
         <description>
          <p>
It is used in asynchronous operations, such as FileSystemManager.listStorages().
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Filesystem::FileSystemStorageArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>FileSystemStorage</ref>[] storages);</webidl>
        <descriptive>
            <brief>
 Called when the asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="storages">
            <descriptive>
                <description><p>
 List of available storage devices
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="FileSystemStorage"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="FileSystemStorageSuccessCallback" id="::Filesystem::FileSystemStorageSuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface FileSystemStorageSuccessCallback {
    void onsuccess(<ref>FileSystemStorage</ref> storage);
  };</webidl>
      <descriptive>
          <brief>
 The FileSystemStorageSuccessCallback callback interface specifies a success callback with a <em>FileSystmeStorage </em>object as input argument.
          </brief>
         <description>
          <p>
It is used in asynchronous operations, such as FileSystemManager.getStorage() and FileSystemManager.addStorageStateChangeListener().
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Filesystem::FileSystemStorageSuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>FileSystemStorage</ref> storage);</webidl>
        <descriptive>
            <brief>
 Called when the asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="storage">
            <descriptive>
                <description><p>
 Storage device structure
                </p></description>
            </descriptive>
            <Type name="FileSystemStorage"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="FileStringSuccessCallback" id="::Filesystem::FileStringSuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface FileStringSuccessCallback {
    void onsuccess(DOMString fileStr);
  };</webidl>
      <descriptive>
          <brief>
 The FileStringSuccessCallback callback interface specifies a success callback with a DOMString object as input argument.
          </brief>
         <description>
          <p>
It is used in asynchronous operations, such as File.readAsText().
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Filesystem::FileStringSuccessCallback::onsuccess">
        <webidl>    void onsuccess(DOMString fileStr);</webidl>
        <descriptive>
            <brief>
 Called when the asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="fileStr">
            <descriptive>
                <description><p>
 File represented as a DOMString resulting from the asynchronous call
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="FileStreamSuccessCallback" id="::Filesystem::FileStreamSuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface FileStreamSuccessCallback {
    void onsuccess(<ref>FileStream</ref> filestream);
  };</webidl>
      <descriptive>
          <brief>
 The FileStreamSuccessCallback interface specifies a success callback with a <em>FileStream </em>object as input argument.
          </brief>
         <description>
          <p>
It is used by asynchronous methods, such as File.openStream().
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Filesystem::FileStreamSuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>FileStream</ref> filestream);</webidl>
        <descriptive>
            <brief>
 Called when the File.openStream asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="filestream">
            <descriptive>
                <description><p>
 Filestream to access file content
                </p></description>
            </descriptive>
            <Type name="FileStream"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="FileArraySuccessCallback" id="::Filesystem::FileArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface FileArraySuccessCallback {
    void onsuccess(<ref>File</ref>[] files);
  };</webidl>
      <descriptive>
          <brief>
 The FileArraySuccessCallback interface defines file system specific success callback for listing methods.
          </brief>
         <description>
          <p>
This callback interface specifies a success callback with a function taking an array of <em>File </em>objects as input argument. It is used in asynchronous methods, such as File.listFiles().
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Filesystem::FileArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>File</ref>[] files);</webidl>
        <descriptive>
            <brief>
 Called when the asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="files">
            <descriptive>
                <description><p>
 Files resulting from the asynchronous call
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="File"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="MessagePort" id="::MessagePort">
    <webidl>module MessagePort {

  [NoInterfaceObject] interface MessagePortManagerObject {
    readonly attribute <ref>MessagePortManager</ref> messageport;
  };
  <ref>Tizen</ref> implements <ref>MessagePortManagerObject</ref>;

  [NoInterfaceObject] interface MessagePortManager {

    <ref>LocalMessagePort</ref> requestLocalMessagePort(DOMString localMessagePortName) raises(<ref>WebAPIException</ref>);

    <ref>LocalMessagePort</ref> requestTrustedLocalMessagePort(DOMString localMessagePortName) raises(<ref>WebAPIException</ref>);

    <ref>RemoteMessagePort</ref> requestRemoteMessagePort(<ref>ApplicationId</ref> appId, DOMString remoteMessagePortName) raises(<ref>WebAPIException</ref>);

    <ref>RemoteMessagePort</ref> requestTrustedRemoteMessagePort(<ref>ApplicationId</ref> appId, DOMString remoteMessagePortName) raises(<ref>WebAPIException</ref>);
  };

  [NoInterfaceObject] interface LocalMessagePort {

    readonly attribute DOMString messagePortName;

    readonly attribute boolean isTrusted;

    long addMessagePortListener(<ref>MessagePortCallback</ref> listener) raises(<ref>WebAPIException</ref>);

    void removeMessagePortListener(long watchId) raises(<ref>WebAPIException</ref>);
  };

  [NoInterfaceObject] interface RemoteMessagePort {

    readonly attribute DOMString messagePortName;

    readonly attribute <ref>ApplicationId</ref> appId;

    readonly attribute boolean isTrusted;

    void sendMessage(<ref>MessagePortDataItem</ref>[] data, optional <ref>LocalMessagePort</ref>? localMessagePort) raises(<ref>WebAPIException</ref>);
  };

  dictionary MessagePortDataItem {
    DOMString key;
    DOMString value;
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface MessagePortCallback {
    void onreceived(<ref>MessagePortDataItem</ref>[] data, <ref>RemoteMessagePort</ref>? remoteMessagePort);
  };
};</webidl>
    <descriptive>
        <brief>
 The MessagePort API provides the functionality for communicating with other applications.
        </brief>
       <description>
        <p>
For more information on the MessagePort features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/io_guide/messageport.htm">MessagePort Guide</a>.
        </p>
       </description>
        <version>
 2.1
        </version>
    </descriptive>
    <Interface name="MessagePortManagerObject" id="::MessagePort::MessagePortManagerObject">
      <webidl>  [NoInterfaceObject] interface MessagePortManagerObject {
    readonly attribute <ref>MessagePortManager</ref> messageport;
  };</webidl>
      <descriptive>
          <brief>
 The <em>MessagePortManagerObject</em> interface defines what is instantiated by the Tizen object from the Tizen Platform.
          </brief>
         <description>
          <p>
The <em>tizen.messageport</em> object allows access to the functionality of the Message Port API.
          </p>
         </description>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="messageport" id="::MessagePort::MessagePortManagerObject::messageport">
        <webidl>    readonly attribute <ref>MessagePortManager</ref> messageport;</webidl>
        <Type name="MessagePortManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="MessagePortManagerObject">
      <webidl>  <ref>Tizen</ref> implements <ref>MessagePortManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="MessagePortManager" id="::MessagePort::MessagePortManager">
      <webidl>  [NoInterfaceObject] interface MessagePortManager {

    <ref>LocalMessagePort</ref> requestLocalMessagePort(DOMString localMessagePortName) raises(<ref>WebAPIException</ref>);

    <ref>LocalMessagePort</ref> requestTrustedLocalMessagePort(DOMString localMessagePortName) raises(<ref>WebAPIException</ref>);

    <ref>RemoteMessagePort</ref> requestRemoteMessagePort(<ref>ApplicationId</ref> appId, DOMString remoteMessagePortName) raises(<ref>WebAPIException</ref>);

    <ref>RemoteMessagePort</ref> requestTrustedRemoteMessagePort(<ref>ApplicationId</ref> appId, DOMString remoteMessagePortName) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The <em>MessagePortManager</em> interface provides methods to request message port to communicate.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="requestLocalMessagePort" id="::MessagePort::MessagePortManager::requestLocalMessagePort">
        <webidl>    <ref>LocalMessagePort</ref> requestLocalMessagePort(DOMString localMessagePortName) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Requests a LocalMessage Port instance to start receiving message from another application.
            </brief>
            <version>
 2.1
            </version>
            <Code> // Requests the LocalMessagePort instance with the specified message port name
 var localMsgPort = tizen.messageport.requestLocalMessagePort('MessagePortA');
 </Code>
        </descriptive>
        <Type name="LocalMessagePort">
          <descriptive>
              <description><p>
 LocalMessagePort LocalMessagePort instance
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="localMessagePortName">
            <descriptive>
                <description><p>
 Name of the local message port to retrieve <br/>The LocalMessagePort instances are identical for the same message port name.
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the input parameter contains an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="requestTrustedLocalMessagePort" id="::MessagePort::MessagePortManager::requestTrustedLocalMessagePort">
        <webidl>    <ref>LocalMessagePort</ref> requestTrustedLocalMessagePort(DOMString localMessagePortName) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Requests a trusted LocalMessagePort instance to receive message from another application.
            </brief>
           <description>
            <p>
Trusted local message port can communicate with applications that are signed with same certificate.
            </p>
           </description>
            <version>
 2.1
            </version>
            <Code> // Requests the LocalMessagePort instance with the specified message port name
 var localMsgPort = tizen.messageport.requestTrustedLocalMessagePort('MessagePortB');
 </Code>
        </descriptive>
        <Type name="LocalMessagePort">
          <descriptive>
              <description><p>
 LocalMessagePort Trusted LocalMessagePort instance
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="localMessagePortName">
            <descriptive>
                <description><p>
 Name of local message port <br/>The LocalMessagePort instances are identical for the same message port name.
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the input parameter contains an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="requestRemoteMessagePort" id="::MessagePort::MessagePortManager::requestRemoteMessagePort">
        <webidl>    <ref>RemoteMessagePort</ref> requestRemoteMessagePort(<ref>ApplicationId</ref> appId, DOMString remoteMessagePortName) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Requests a RemoteMessagePort instance to send message to another application.
            </brief>
           <description>
            <p>
If the message port name and application ID are the same, the platform returns the same RemoteMessagePort instance.
            </p>
           </description>
            <version>
 2.1
            </version>
            <Code> // Requests the RemoteMessagePort instance with the specified message port name
 var remoteMsgPort = tizen.messageport.requestRemoteMessagePort('6xaeuflskd.App1', 'MessagePortA');
 </Code>
        </descriptive>
        <Type name="RemoteMessagePort">
          <descriptive>
              <description><p>
 RemoteMessagePort RemoteMessagePort instance
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="appId">
            <descriptive>
                <description><p>
                 ID of the application to send messages
                </p></description>
            </descriptive>
            <Type name="ApplicationId"/>
          </Argument>
          <Argument name="remoteMessagePortName">
            <descriptive>
                <description><p>
 Name of remote message port
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if an input parameter contains an invalid value.
                </p></description>
                <description><p>
 with error type NotFoundError, if the port of the target application is not found.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="requestTrustedRemoteMessagePort" id="::MessagePort::MessagePortManager::requestTrustedRemoteMessagePort">
        <webidl>    <ref>RemoteMessagePort</ref> requestTrustedRemoteMessagePort(<ref>ApplicationId</ref> appId, DOMString remoteMessagePortName) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Requests a trusted RemoteMessagePort instance to receive message from another application.
            </brief>
           <description>
            <p>
If the message port name and application ID are the same, the platform returns the same RemoteMessagePort instance.
Trusted remote message port can communicate with applications that are signed with same certificate.
            </p>
           </description>
            <version>
 2.1
            </version>
            <Code> // Requests the RemoteMessagePort instance with the specified message port name.
 var remoteMsgPort = tizen.messageport.requestTrustedRemoteMessagePort('6xauflskd.App1', 'MessagePortB');
 </Code>
        </descriptive>
        <Type name="RemoteMessagePort">
          <descriptive>
              <description><p>
 RemoteMessagePort Trusted RemoteMessagePort instance
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="appId">
            <descriptive>
                <description><p>
                 ID of the application to send messages
                </p></description>
            </descriptive>
            <Type name="ApplicationId"/>
          </Argument>
          <Argument name="remoteMessagePortName">
            <descriptive>
                <description><p>
 Name of remote message port
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if an input parameter contains an invalid value.
                </p></description>
                <description><p>
 with error type NotFoundError, if the port of the target application is not found.
                </p></description>
                <description><p>
 with error type InvalidAccessError, if the target application is not signed with the same certification.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="LocalMessagePort" id="::MessagePort::LocalMessagePort">
      <webidl>  [NoInterfaceObject] interface LocalMessagePort {

    readonly attribute DOMString messagePortName;

    readonly attribute boolean isTrusted;

    long addMessagePortListener(<ref>MessagePortCallback</ref> listener) raises(<ref>WebAPIException</ref>);

    void removeMessagePortListener(long watchId) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The <em>LocalMessagePort</em> interface provides methods to receive data.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="messagePortName" id="::MessagePort::LocalMessagePort::messagePortName">
        <webidl>    readonly attribute DOMString messagePortName;</webidl>
        <descriptive>
            <brief>
 The name of the message port name.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="isTrusted" id="::MessagePort::LocalMessagePort::isTrusted">
        <webidl>    readonly attribute boolean isTrusted;</webidl>
        <descriptive>
            <brief>
 The flag indicating whether the message port is trusted.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Operation name="addMessagePortListener" id="::MessagePort::LocalMessagePort::addMessagePortListener">
        <webidl>    long addMessagePortListener(<ref>MessagePortCallback</ref> listener) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds a message port listener to receive messages from other applications.
            </brief>
            <version>
 2.1
            </version>
            <Code> function onreceived(data, remoteMsgPort) {
   console.log('Received data to \'' + remoteMsgPort.messagePortName + '\'');
 }

 var localMsgPort = tizen.messageport.requestLocalMessagePort('MessagePortA');
 var watchId = localMsgPort.addMessagePortListener(onreceived);
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long ID of the listener that is later used to remove the listener
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="listener">
            <descriptive>
                <description><p>
 Callback function that is called when a message is received
                </p></description>
            </descriptive>
            <Type name="MessagePortCallback"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the input parameter contains an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removeMessagePortListener" id="::MessagePort::LocalMessagePort::removeMessagePortListener">
        <webidl>    void removeMessagePortListener(long watchId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes the message port listener.
            </brief>
            <version>
 2.1
            </version>
            <Code> var localMsgPort = tizen.messageport.requestLocalMessagePort('MessagePortA');
 var watchId = localMsgPort.addMessagePortListener(onreceived);
 // Communication routines of your app...
 localMsgPort.removeMessagePortListener(watchId);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="watchId">
            <descriptive>
                <description><p>
 ID to identify the listener
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the input parameter contains an invalid value.
                </p></description>
                <description><p>
 with error type NotFoundError, if the watch ID has not been found.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="RemoteMessagePort" id="::MessagePort::RemoteMessagePort">
      <webidl>  [NoInterfaceObject] interface RemoteMessagePort {

    readonly attribute DOMString messagePortName;

    readonly attribute <ref>ApplicationId</ref> appId;

    readonly attribute boolean isTrusted;

    void sendMessage(<ref>MessagePortDataItem</ref>[] data, optional <ref>LocalMessagePort</ref>? localMessagePort) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The <em>RemoteMessagePort</em> interface provides methods to send messages.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="messagePortName" id="::MessagePort::RemoteMessagePort::messagePortName">
        <webidl>    readonly attribute DOMString messagePortName;</webidl>
        <descriptive>
            <brief>
 The message port name.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="appId" id="::MessagePort::RemoteMessagePort::appId">
        <webidl>    readonly attribute <ref>ApplicationId</ref> appId;</webidl>
        <descriptive>
            <brief>
 The application ID to connect with.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type name="ApplicationId"/>
      </Attribute>
      <Attribute readonly="readonly" name="isTrusted" id="::MessagePort::RemoteMessagePort::isTrusted">
        <webidl>    readonly attribute boolean isTrusted;</webidl>
        <descriptive>
            <brief>
 The flag indicating whether the message port is trusted.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Operation name="sendMessage" id="::MessagePort::RemoteMessagePort::sendMessage">
        <webidl>    void sendMessage(<ref>MessagePortDataItem</ref>[] data, optional <ref>LocalMessagePort</ref>? localMessagePort) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sends messages to the specified application.
            </brief>
           <description>
            <p>
The sent messages will be ignored without any notice, unless the target application added one or more listeners to the target local message port.
            </p>
           </description>
            <version>
 2.1
            </version>
            <Code> // Sends message
 var localMsgPort = tizen.messageport.requestLocalMessagePort('MessagePortA');
 var remoteMsgPort = tizen.messageport.requestRemoteMessagePort('6xaeuflskd.App1', 'MessagePortB');
 localMsgPort.addMessagePortListener(function(items, remoteport) {
   // ...
   if(remoteport !== null) {
     remoteport.sendMessage([{key:'RESULT', value:'OK'}]);
   }
 });
 remoteMsgPort.sendMessage(
   [
     { key:'CMD', value:'openWindow' },
     { key:'OPTION', value:'bx' }
   ]
   , localMsgPort);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="data">
            <descriptive>
                <description><p>
             Array of data to send
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="MessagePortDataItem"/>
            </Type>
          </Argument>
          <Argument optional="optional" name="localMessagePort">
            <descriptive>
                <description><p>
 <em>LocalMessagePort<em> object that gives local message port of the current application
It can be used to receive reply messages from the other end of the message port.
The order of items in this array is not guaranteed to be preserved during data transfer, and values of <em>key</em> within this
array must not be duplicated or empty.
</em></em>                </p></description>
            </descriptive>
            <Type name="LocalMessagePort" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if an input parameter contains an invalid value.
                </p></description>
                <description><p>
 with error type QuotaExceededError, if the size of message has exceeded the maximum limit.
                </p></description>
                <description><p>
 with error type UnknownError, if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Dictionary name="MessagePortDataItem" id="::MessagePort::MessagePortDataItem">
      <webidl>  dictionary MessagePortDataItem {
    DOMString key;
    DOMString value;
  };</webidl>
      <descriptive>
          <brief>
 The dictionary that specifies the data item that is transferred.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <DictionaryMember name="key" id="::MessagePort::MessagePortDataItem::key">
        <webidl>    DOMString key;</webidl>
        <Type type="DOMString"/>
      </DictionaryMember>
      <DictionaryMember name="value" id="::MessagePort::MessagePortDataItem::value">
        <webidl>    DOMString value;</webidl>
        <Type type="DOMString"/>
      </DictionaryMember>
    </Dictionary>
    <Interface name="MessagePortCallback" id="::MessagePort::MessagePortCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface MessagePortCallback {
    void onreceived(<ref>MessagePortDataItem</ref>[] data, <ref>RemoteMessagePort</ref>? remoteMessagePort);
  };</webidl>
      <descriptive>
          <brief>
 The MessagePortCallback interface defines notification callbacks for receiving data from other applications.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onreceived" id="::MessagePort::MessagePortCallback::onreceived">
        <webidl>    void onreceived(<ref>MessagePortDataItem</ref>[] data, <ref>RemoteMessagePort</ref>? remoteMessagePort);</webidl>
        <descriptive>
            <brief>
 Called when data is received from other applications via the specified message port name.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="data">
            <descriptive>
                <description><p>
              Array of data received from another application
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="MessagePortDataItem"/>
            </Type>
          </Argument>
          <Argument name="remoteMessagePort">
            <descriptive>
                <description><p>
 RemoteMessagePort port that can be used to reply for the received message
                </p></description>
            </descriptive>
            <Type name="RemoteMessagePort" nullable="nullable"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="Package" id="::Package">
    <webidl>module Package {&#13;
&#13;
&#13;
    typedef DOMString PackageId;&#13;
&#13;
&#13;
    [NoInterfaceObject] interface PackageManagerObject {&#13;
        readonly attribute <ref>PackageManager</ref> package;&#13;
    };&#13;
    <ref>Tizen</ref> implements <ref>PackageManagerObject</ref>;&#13;
&#13;
&#13;
    [NoInterfaceObject] interface PackageManager {&#13;
&#13;
&#13;
        void install(DOMString packageFileURI,&#13;
                     <ref>PackageProgressCallback</ref> progressCallback,&#13;
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);&#13;
&#13;
&#13;
        void uninstall(<ref>PackageId</ref> id, &#13;
                       <ref>PackageProgressCallback</ref> progressCallback,&#13;
                       optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);&#13;
&#13;
&#13;
&#13;
&#13;
        void getPackagesInfo(<ref>PackageInformationArraySuccessCallback</ref> successCallback,&#13;
                             optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);&#13;
&#13;
&#13;
        <ref>PackageInformation</ref> getPackageInfo(optional <ref>PackageId</ref>? id) raises(<ref>WebAPIException</ref>);&#13;
&#13;
&#13;
        void setPackageInfoEventListener(<ref>PackageInformationEventCallback</ref> eventCallback) raises(<ref>WebAPIException</ref>);&#13;
        &#13;
&#13;
        void unsetPackageInfoEventListener() raises(<ref>WebAPIException</ref>);&#13;
    &#13;
    };&#13;
&#13;
&#13;
    [NoInterfaceObject] interface PackageInformation {&#13;
&#13;
        readonly attribute <ref>PackageId</ref> id;&#13;
&#13;
&#13;
        readonly attribute DOMString name;&#13;
&#13;
&#13;
        readonly attribute DOMString iconPath;&#13;
&#13;
&#13;
        readonly attribute DOMString version;&#13;
&#13;
&#13;
        readonly attribute long totalSize;&#13;
&#13;
&#13;
        readonly attribute long dataSize;&#13;
&#13;
&#13;
        readonly attribute Date lastModified;&#13;
&#13;
&#13;
        readonly attribute DOMString author;&#13;
&#13;
&#13;
        readonly attribute DOMString description;&#13;
&#13;
&#13;
        readonly attribute <ref>ApplicationId</ref>[] appIds;&#13;
&#13;
    };&#13;
&#13;
&#13;
    [Callback=FunctionOnly, NoInterfaceObject] interface PackageInformationArraySuccessCallback {&#13;
&#13;
&#13;
        void onsuccess(<ref>PackageInformation</ref>[] informationArray);&#13;
    };&#13;
&#13;
&#13;
    [Callback, NoInterfaceObject] interface PackageProgressCallback {&#13;
&#13;
&#13;
        void onprogress(<ref>PackageId</ref> id, short progress);&#13;
&#13;
&#13;
        void oncomplete(<ref>PackageId</ref> id);&#13;
    };&#13;
&#13;
&#13;
    [Callback, NoInterfaceObject] interface PackageInformationEventCallback {&#13;
&#13;
&#13;
        void oninstalled(<ref>PackageInformation</ref> info);&#13;
&#13;
&#13;
        void onupdated(<ref>PackageInformation</ref> info);&#13;
&#13;
&#13;
        void onuninstalled(<ref>PackageId</ref> id);&#13;
    };&#13;
&#13;
};</webidl>
    <descriptive>
        <brief>
 This API provides functionalities to install or uninstall packages, and retrieve information about installed packages.<br/>It also provides a listener method so that an application can be notified when there is a change on the installed packages.
For more information on the Package features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/app_guide/package.htm">Package Guide</a>.
        </brief>
        <version>
 2.1
        </version>
    </descriptive>
    <Typedef name="PackageId" id="::Package::PackageId">
      <webidl>    typedef DOMString PackageId;</webidl>
      <descriptive>
          <brief>
 A unique ID for an installed package.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <Type type="DOMString"/>
    </Typedef>
    <Interface name="PackageManagerObject" id="::Package::PackageManagerObject">
      <webidl>    [NoInterfaceObject] interface PackageManagerObject {&#13;
        readonly attribute <ref>PackageManager</ref> package;&#13;
    };</webidl>
      <descriptive>
          <brief>
 This interface defines what is instantiated by the <em>Tizen </em>object from the Tizen Platform.
          </brief>
         <description>
          <p>
The <em>tizen.package </em>object allows access to Package API functionality.
          </p>
         </description>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="package" id="::Package::PackageManagerObject::package">
        <webidl>        readonly attribute <ref>PackageManager</ref> package;</webidl>
        <Type name="PackageManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="PackageManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>PackageManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="PackageManager" id="::Package::PackageManager">
      <webidl>    [NoInterfaceObject] interface PackageManager {&#13;
&#13;
&#13;
        void install(DOMString packageFileURI,&#13;
                     <ref>PackageProgressCallback</ref> progressCallback,&#13;
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);&#13;
&#13;
&#13;
        void uninstall(<ref>PackageId</ref> id, &#13;
                       <ref>PackageProgressCallback</ref> progressCallback,&#13;
                       optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);&#13;
&#13;
&#13;
&#13;
&#13;
        void getPackagesInfo(<ref>PackageInformationArraySuccessCallback</ref> successCallback,&#13;
                             optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);&#13;
&#13;
&#13;
        <ref>PackageInformation</ref> getPackageInfo(optional <ref>PackageId</ref>? id) raises(<ref>WebAPIException</ref>);&#13;
&#13;
&#13;
        void setPackageInfoEventListener(<ref>PackageInformationEventCallback</ref> eventCallback) raises(<ref>WebAPIException</ref>);&#13;
        &#13;
&#13;
        void unsetPackageInfoEventListener() raises(<ref>WebAPIException</ref>);&#13;
    &#13;
    };</webidl>
      <descriptive>
          <brief>
 This interface defines the package manager.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="install" id="::Package::PackageManager::install">
        <webidl>        void install(DOMString packageFileURI,&#13;
                     <ref>PackageProgressCallback</ref> progressCallback,&#13;
                     optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Installs a package with a specified file on a device.
            </brief>
           <description>
            <p>
This API provides a way to notify the progress and completion of an installation request through PackageProgressCallback.
            </p>
            <p>
The <em>ErrorCallback() </em>is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError - If the package is not found at the specified location.              </li>
              <li>
UnknownError - If it is not allowed to install the package by the platform or any other platform error occurs.              </li>
            </ul>
           </description>
            <version>
 2.1
            </version>
            <privilegelevel>
 platform
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/packagemanager.install
            </privilege>
            <remark>
 Virtual path cannot be used for the parameter. First, you need to convert any virtual path to a file URI path using the resolve function in the Filesystem API before passing it to the function.
            </remark>
            <Code> var onInstallation = {
      onprogress: function(packageId, percentage) {
         console.log(&quot;On installation(&quot; + packageId + &quot;) : progress(&quot; + percentage + &quot;)&quot;);
      },
      oncomplete: function(packageId) {
         console.log(&quot;Installation(&quot; + packageId + &quot;) Complete&quot;);
      }
 }

 var onError = function (err) {
      console.log(&quot;Error occurred on installation : &quot; + err.name);
 }

 // Let's assume that the &quot;test.wgt&quot; file exists in the downloads directory
 tizen.filesystem.resolve(&quot;downloads/test.wgt&quot;,
     function (file) {
         console.log(&quot;file URI : &quot; + file.toURI());
         tizen.package.install(file.toURI(), onInstallation, onError);
     },
     function (err) {
         console.log(&quot;Error occurred on resolve : &quot; + err.name);
     },
     &quot;r&quot;);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="packageFileURI">
            <descriptive>
                <description><p>
 The location of the package to install
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument name="progressCallback">
            <descriptive>
                <description><p>
 The method to invoke when the installation is in progress or has been completed
                </p></description>
            </descriptive>
            <Type name="PackageProgressCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="uninstall" id="::Package::PackageManager::uninstall">
        <webidl>        void uninstall(<ref>PackageId</ref> id, &#13;
                       <ref>PackageProgressCallback</ref> progressCallback,&#13;
                       optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Uninstalls the package with a specified package ID.
            </brief>
           <description>
            <p>
This API provides a way to notify about the progress and completion of an uninstallation request through PackageProgressCallback.
            </p>
            <p>
The <em>ErrorCallback() </em>is launched with these error types:
            </p>
            <ul>
              <li>
NotFoundError - If the package is not found with the specified ID.              </li>
              <li>
UnknownError - If it is not allowed to uninstall the package from the platform or any other platform error occurs.              </li>
            </ul>
           </description>
            <version>
 2.1
            </version>
            <privilegelevel>
 platform
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/packagemanager.install
            </privilege>
            <remark>
 Some preloaded packages cannot be uninstalled. In this case, ErrorCallback with the UnKnownError type is launched.
            </remark>
            <Code> var onUninstallation = {
      onprogress: function(packageId, percentage) {
         console.log(&quot;On Uninstallation(&quot; + packageId + &quot;) : progress(&quot; + percentage + &quot;)&quot;);
      },
      oncomplete: function(packageId) {
         console.log(&quot;Uninstallation(&quot; + packageId + &quot;) Complete&quot;);
      }
 };

 var onError = function (err) {
      console.log(&quot;Error occurred on installation : &quot; + err.name);
 };

 // Let's assume that the package ID to uninstall is &quot;testapp001&quot;
 tizen.package.uninstall(&quot;testapp001&quot;, onUninstallation, onError);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 The package ID to uninstall
                </p></description>
            </descriptive>
            <Type name="PackageId"/>
          </Argument>
          <Argument name="progressCallback">
            <descriptive>
                <description><p>
 The method to invoke when uninstallation is in progress or has been completed
                </p></description>
            </descriptive>
            <Type name="PackageProgressCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if an input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getPackagesInfo" id="::Package::PackageManager::getPackagesInfo">
        <webidl>        void getPackagesInfo(<ref>PackageInformationArraySuccessCallback</ref> successCallback,&#13;
                             optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets information of the installed packages.
            </brief>
           <description>
            <p>
The result contains the snapshots of the installed packages information.
            </p>
            <p>
The <em>errorCallback()</em> is launched with this error type:
            </p>
            <ul>
              <li>
UnknownError - If any other platform error occurs.              </li>
            </ul>
           </description>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/package.info
            </privilege>
            <Code> function onListInstalledPackages(packages) {
     for (var i = 0; i &#60; packages.length; i++) {
         console.log(&quot;Package id[&quot;+i+&quot;] : &quot; +packages[i].id);
     }
 }

 tizen.package.getPackagesInfo(
     onListInstalledPackages,
     function (err) {console.log(&quot;Can't obtain packages list&quot; + err.name);});
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to call when an invocation ends successfully
                </p></description>
            </descriptive>
            <Type name="PackageInformationArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to call when an error occurs
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if an input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getPackageInfo" id="::Package::PackageManager::getPackageInfo">
        <webidl>        <ref>PackageInformation</ref> getPackageInfo(optional <ref>PackageId</ref>? id) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets information of an installed package.
            </brief>
           <description>
            <p>
If the ID is set to <var>null</var> or not set at all, it returns the package information of the current application.
The list of installed packages and their package IDs is obtained using <em>getPackagesInfo()</em>.
            </p>
           </description>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/package.info
            </privilege>
            <Code> var packageInfo = tizen.package.getPackageInfo(null);

 console.log(&quot;Current Package ID : &quot; + packageInfo.id);
 </Code>
        </descriptive>
        <Type name="PackageInformation">
          <descriptive>
              <description><p>
 PackageInformation The information of a package
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="id">
            <descriptive>
                <description><p>
 A string representing the package ID. If the ID is not provided, the package information of the calling application is returned.
                </p></description>
            </descriptive>
            <Type name="PackageId" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if an input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotFoundError, if the package with the specified ID is not found.
                </p></description>
                <description><p>
 with error type UnknownError, if the package information cannot be retrieved because of a platform error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setPackageInfoEventListener" id="::Package::PackageManager::setPackageInfoEventListener">
        <webidl>        void setPackageInfoEventListener(<ref>PackageInformationEventCallback</ref> eventCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sets a listener to receive notifications for any changes made to the list of installed packages.
            </brief>
           <description>
            <p>
This method sets a <em>PackageInformationEventCallback</em> type callback that is triggered when a package is installed, removed, or updated.
            </p>
            <p>
The callback lasts until the <em>unsetPackageInfoEventListener()</em> method is called.
            </p>
           </description>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/package.info
            </privilege>
            <Code> var packageEventCallback = {
    oninstalled: function(packageInfo) {
       console.log('The package ' + packageInfo.name + ' is installed');
    },
    onupdated: function(packageInfo) {
       console.log('The package ' + packageInfo.name + ' is updated');
    },
    onuninstalled: function(packageId) {
       console.log('The package ' + packageId + ' is uninstalled');
    }
 };

 tizen.package.setPackageInfoEventListener(packageEventCallback);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="eventCallback">
            <descriptive>
                <description><p>
 The method to be called when any change is made to the list of installed packages.
                </p></description>
            </descriptive>
            <Type name="PackageInformationEventCallback"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if an input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if the package list change event cannot be generated because of a platform error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="unsetPackageInfoEventListener" id="::Package::PackageManager::unsetPackageInfoEventListener">
        <webidl>        void unsetPackageInfoEventListener() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Unsets the listener to stop receiving package notifications.
            </brief>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/package.info
            </privilege>
            <Code> tizen.package.unsetPackageInfoEventListener();
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError, if the listener removal request fails because of a platform error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="PackageInformation" id="::Package::PackageInformation">
      <webidl>    [NoInterfaceObject] interface PackageInformation {&#13;
&#13;
        readonly attribute <ref>PackageId</ref> id;&#13;
&#13;
&#13;
        readonly attribute DOMString name;&#13;
&#13;
&#13;
        readonly attribute DOMString iconPath;&#13;
&#13;
&#13;
        readonly attribute DOMString version;&#13;
&#13;
&#13;
        readonly attribute long totalSize;&#13;
&#13;
&#13;
        readonly attribute long dataSize;&#13;
&#13;
&#13;
        readonly attribute Date lastModified;&#13;
&#13;
&#13;
        readonly attribute DOMString author;&#13;
&#13;
&#13;
        readonly attribute DOMString description;&#13;
&#13;
&#13;
        readonly attribute <ref>ApplicationId</ref>[] appIds;&#13;
&#13;
    };</webidl>
      <descriptive>
          <brief>
 This interface defines the general information available to an installed package.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="id" id="::Package::PackageInformation::id">
        <webidl>        readonly attribute <ref>PackageId</ref> id;</webidl>
        <descriptive>
            <brief>
 An attribute to store the identifier of a package.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type name="PackageId"/>
      </Attribute>
      <Attribute readonly="readonly" name="name" id="::Package::PackageInformation::name">
        <webidl>        readonly attribute DOMString name;</webidl>
        <descriptive>
            <brief>
 An attribute to store the package name.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="iconPath" id="::Package::PackageInformation::iconPath">
        <webidl>        readonly attribute DOMString iconPath;</webidl>
        <descriptive>
            <brief>
 An attribute to store the icon path of a package.
            </brief>
           <description>
            <p>
The icon path of the package is the same as the icon path of the relevant application
(see the <a href="application.html#ApplicationInformation::iconPath">iconPath</a> attribute of
the <a href="application.html#ApplicationInformation">ApplicationInformation</a> interface).
            </p>
            <p>
The relevant application is the one with the same
<a href="application.html#ApplicationInformation::packageId">packageId</a> as the
<a href="#PackageInformation::id">id</a> of this package.
            </p>
           </description>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="version" id="::Package::PackageInformation::version">
        <webidl>        readonly attribute DOMString version;</webidl>
        <descriptive>
            <brief>
 An attribute to store the package version.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="totalSize" id="::Package::PackageInformation::totalSize">
        <webidl>        readonly attribute long totalSize;</webidl>
        <descriptive>
            <brief>
 An attribute to store the total installed size(package + data) of a package.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="dataSize" id="::Package::PackageInformation::dataSize">
        <webidl>        readonly attribute long dataSize;</webidl>
        <descriptive>
            <brief>
 An attribute to store the current data size of a package.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="lastModified" id="::Package::PackageInformation::lastModified">
        <webidl>        readonly attribute Date lastModified;</webidl>
        <descriptive>
            <brief>
 An attribute to store the latest installed or updated time of a package.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="Date"/>
      </Attribute>
      <Attribute readonly="readonly" name="author" id="::Package::PackageInformation::author">
        <webidl>        readonly attribute DOMString author;</webidl>
        <descriptive>
            <brief>
 An attribute to store the author of a package.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="description" id="::Package::PackageInformation::description">
        <webidl>        readonly attribute DOMString description;</webidl>
        <descriptive>
            <brief>
 An attribute to store the package description.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="appIds" id="::Package::PackageInformation::appIds">
        <webidl>        readonly attribute <ref>ApplicationId</ref>[] appIds;</webidl>
        <descriptive>
            <brief>
 An attribute to store the application ID list of a package.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="array">
          <Type name="ApplicationId"/>
        </Type>
      </Attribute>
    </Interface>
    <Interface name="PackageInformationArraySuccessCallback" id="::Package::PackageInformationArraySuccessCallback">
      <webidl>    [Callback=FunctionOnly, NoInterfaceObject] interface PackageInformationArraySuccessCallback {&#13;
&#13;
&#13;
        void onsuccess(<ref>PackageInformation</ref>[] informationArray);&#13;
    };</webidl>
      <descriptive>
          <brief>
 This interface invokes the success callback with an array of <em>PackageInformation </em>objects as an input parameter when the installed package list is retrieved.
          </brief>
         <description>
          <p>
It is used in <em>tizen.package.getPackagesInfo()</em>.
          </p>
         </description>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Package::PackageInformationArraySuccessCallback::onsuccess">
        <webidl>        void onsuccess(<ref>PackageInformation</ref>[] informationArray);</webidl>
        <descriptive>
            <brief>
 Called when the asynchronous call completes successfully.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="informationArray">
            <descriptive>
                <description><p>
 A list of installed packages' information.
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="PackageInformation"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="PackageProgressCallback" id="::Package::PackageProgressCallback">
      <webidl>    [Callback, NoInterfaceObject] interface PackageProgressCallback {&#13;
&#13;
&#13;
        void onprogress(<ref>PackageId</ref> id, short progress);&#13;
&#13;
&#13;
        void oncomplete(<ref>PackageId</ref> id);&#13;
    };</webidl>
      <descriptive>
          <brief>
 This callback interface specifies subscriptions for any notification on the progress or completion of requests.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onprogress" id="::Package::PackageProgressCallback::onprogress">
        <webidl>        void onprogress(<ref>PackageId</ref> id, short progress);</webidl>
        <descriptive>
            <brief>
 Called while the request is in progress.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 The package ID
                </p></description>
            </descriptive>
            <Type name="PackageId"/>
          </Argument>
          <Argument name="progress">
            <descriptive>
                <description><p>
 The progress in percentage.
                </p></description>
            </descriptive>
            <Type type="short"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="oncomplete" id="::Package::PackageProgressCallback::oncomplete">
        <webidl>        void oncomplete(<ref>PackageId</ref> id);</webidl>
        <descriptive>
            <brief>
 Called when the request is completed.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 The package ID
                </p></description>
            </descriptive>
            <Type name="PackageId"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="PackageInformationEventCallback" id="::Package::PackageInformationEventCallback">
      <webidl>    [Callback, NoInterfaceObject] interface PackageInformationEventCallback {&#13;
&#13;
&#13;
        void oninstalled(<ref>PackageInformation</ref> info);&#13;
&#13;
&#13;
        void onupdated(<ref>PackageInformation</ref> info);&#13;
&#13;
&#13;
        void onuninstalled(<ref>PackageId</ref> id);&#13;
    };</webidl>
      <descriptive>
          <brief>
 This callback interface specifies methods that are invoked when a package is installed, updated, or uninstalled.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="oninstalled" id="::Package::PackageInformationEventCallback::oninstalled">
        <webidl>        void oninstalled(<ref>PackageInformation</ref> info);</webidl>
        <descriptive>
            <brief>
 Called when a package is installed.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="info">
            <descriptive>
                <description><p>
 The information of the installed package
                </p></description>
            </descriptive>
            <Type name="PackageInformation"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="onupdated" id="::Package::PackageInformationEventCallback::onupdated">
        <webidl>        void onupdated(<ref>PackageInformation</ref> info);</webidl>
        <descriptive>
            <brief>
 Called when a package is updated.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="info">
            <descriptive>
                <description><p>
 The information of the updated package
                </p></description>
            </descriptive>
            <Type name="PackageInformation"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="onuninstalled" id="::Package::PackageInformationEventCallback::onuninstalled">
        <webidl>        void onuninstalled(<ref>PackageId</ref> id);</webidl>
        <descriptive>
            <brief>
 Called when a package is uninstalled.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="id">
            <descriptive>
                <description><p>
 The ID of the uninstalled package
                </p></description>
            </descriptive>
            <Type name="PackageId"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="SystemInfo" id="::SystemInfo">
    <webidl>module SystemInfo {

  enum SystemInfoPropertyId { &quot;BATTERY&quot; , &quot;CPU&quot;, &quot;STORAGE&quot;, &quot;DISPLAY&quot;, &quot;DEVICE_ORIENTATION&quot;, &quot;BUILD&quot;, &quot;LOCALE&quot;, &quot;NETWORK&quot;, &quot;WIFI_NETWORK&quot;, &quot;CELLULAR_NETWORK&quot;, &quot;SIM&quot;, &quot;PERIPHERAL&quot;, &quot;MEMORY&quot;, &quot;VIDEOSOURCE&quot; };

  enum SystemInfoNetworkType { &quot;NONE&quot;, &quot;2G&quot;, &quot;2.5G&quot;, &quot;3G&quot;, &quot;4G&quot;, &quot;WIFI&quot;, &quot;ETHERNET&quot;, &quot;UNKNOWN&quot; };

  enum SystemInfoDeviceOrientationStatus { &quot;PORTRAIT_PRIMARY&quot;, &quot;PORTRAIT_SECONDARY&quot;, &quot;LANDSCAPE_PRIMARY&quot;, &quot;LANDSCAPE_SECONDARY&quot; };

  enum SystemInfoSimState { &quot;ABSENT&quot;, &quot;INITIALIZING&quot;, &quot;READY&quot;, &quot;PIN_REQUIRED&quot;, &quot;PUK_REQUIRED&quot;, &quot;NETWORK_LOCKED&quot;, &quot;SIM_LOCKED&quot;, &quot;UNKNOWN&quot; };

  enum SystemInfoProfile { &quot;MOBILE_FULL&quot;, &quot;MOBILE_WEB&quot;, &quot;MOBILE&quot;, &quot;WEARABLE&quot;, &quot;TV&quot; };

  enum SystemInfoLowMemoryStatus { &quot;NORMAL&quot;, &quot;WARNING&quot; };

  enum SystemInfoVideoSourceType {
      &quot;TV&quot;,
      &quot;AV&quot;,
      &quot;SVIDEO&quot;,
      &quot;COMP&quot;,
      &quot;PC&quot;,
      &quot;HDMI&quot;,
      &quot;SCART&quot;,
      &quot;DVI&quot;,
      &quot;MEDIA&quot;
  };

  [NoInterfaceObject] interface SystemInfoObject {
    readonly attribute <ref>SystemInfo</ref> systeminfo;
  };
  <ref>Tizen</ref> implements <ref>SystemInfoObject</ref>;

  [NoInterfaceObject] interface SystemInfo {
    long long getTotalMemory() raises(<ref>WebAPIException</ref>);

    long long getAvailableMemory() raises(<ref>WebAPIException</ref>);

    <ref>SystemInfoDeviceCapability</ref> getCapabilities() raises(<ref>WebAPIException</ref>);

    any getCapability(DOMString key) raises(<ref>WebAPIException</ref>);

    long getCount(<ref>SystemInfoPropertyId</ref> property) raises(<ref>WebAPIException</ref>);

    void getPropertyValue(<ref>SystemInfoPropertyId</ref> property,
                          <ref>SystemInfoPropertySuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void getPropertyValueArray(<ref>SystemInfoPropertyId</ref> property,
                          <ref>SystemInfoPropertyArraySuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    unsigned long addPropertyValueChangeListener(<ref>SystemInfoPropertyId</ref> property,
                                        <ref>SystemInfoPropertySuccessCallback</ref> successCallback,
                                        optional <ref>SystemInfoOptions</ref>? options,
                                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    unsigned long addPropertyValueArrayChangeListener(<ref>SystemInfoPropertyId</ref> property,
                                        <ref>SystemInfoPropertyArraySuccessCallback</ref> successCallback,
                                        optional <ref>SystemInfoOptions</ref>? options,
                                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void removePropertyValueChangeListener(unsigned long listenerId) raises(<ref>WebAPIException</ref>);
  };

  [NoInterfaceObject] interface SystemInfoDeviceCapability {
    readonly attribute boolean bluetooth;

    readonly attribute boolean nfc;

    readonly attribute boolean nfcReservedPush ;

    readonly attribute unsigned short multiTouchCount;

    readonly attribute boolean inputKeyboard;

    readonly attribute boolean inputKeyboardLayout;

    readonly attribute boolean wifi;

    readonly attribute boolean wifiDirect;

    readonly attribute boolean opengles;

    readonly attribute DOMString openglestextureFormat;

    readonly attribute boolean openglesVersion1_1;

    readonly attribute boolean openglesVersion2_0;

    readonly attribute boolean fmRadio;

    readonly attribute DOMString platformVersion raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString webApiVersion raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString nativeApiVersion raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString platformName;

    readonly attribute boolean camera;

    readonly attribute boolean cameraFront;

    readonly attribute boolean cameraFrontFlash;

    readonly attribute boolean cameraBack;

    readonly attribute boolean cameraBackFlash;

    readonly attribute boolean location;

    readonly attribute boolean locationGps;

    readonly attribute boolean locationWps;

    readonly attribute boolean microphone;

    readonly attribute boolean usbHost;

    readonly attribute boolean usbAccessory;

    readonly attribute boolean screenOutputRca;

    readonly attribute boolean screenOutputHdmi;

    readonly attribute DOMString platformCoreCpuArch;

    readonly attribute DOMString platformCoreFpuArch;

    readonly attribute boolean sipVoip;

    readonly attribute DOMString duid;

    readonly attribute boolean speechRecognition;

    readonly attribute boolean speechSynthesis;

    readonly attribute boolean accelerometer;

    readonly attribute boolean accelerometerWakeup;

    readonly attribute boolean barometer;

    readonly attribute boolean barometerWakeup;

    readonly attribute boolean gyroscope;

    readonly attribute boolean gyroscopeWakeup;

    readonly attribute boolean magnetometer;

    readonly attribute boolean magnetometerWakeup;

    readonly attribute boolean photometer;

    readonly attribute boolean photometerWakeup;

    readonly attribute boolean proximity;

    readonly attribute boolean proximityWakeup;

    readonly attribute boolean tiltmeter;

    readonly attribute boolean tiltmeterWakeup;

    readonly attribute boolean dataEncryption;

    readonly attribute boolean graphicsAcceleration;

    readonly attribute boolean push;

    readonly attribute boolean telephony;

    readonly attribute boolean telephonyMms;

    readonly attribute boolean telephonySms;

    readonly attribute boolean screenSizeNormal;

    readonly attribute boolean screenSize480_800;

    readonly attribute boolean screenSize720_1280;

    readonly attribute boolean autoRotation;

    readonly attribute boolean shellAppWidget;

    readonly attribute boolean visionImageRecognition;

    readonly attribute boolean visionQrcodeGeneration;

    readonly attribute boolean visionQrcodeRecognition;

    readonly attribute boolean visionFaceRecognition;

    readonly attribute boolean secureElement;

    readonly attribute boolean nativeOspCompatible;

    readonly attribute <ref>SystemInfoProfile</ref> profile;
  };

  dictionary SystemInfoOptions {
    unsigned long timeout;

    double highThreshold;

    double lowThreshold;
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface SystemInfoPropertySuccessCallback {
    void onsuccess(<ref>SystemInfoProperty</ref> property);
  };

  [Callback=FunctionOnly, NoInterfaceObject] interface SystemInfoPropertyArraySuccessCallback {
    void onsuccess(<ref>SystemInfoProperty</ref>[] properties);
  };

  [NoInterfaceObject] interface SystemInfoProperty {
  };

  [NoInterfaceObject] interface SystemInfoBattery : <ref>SystemInfoProperty</ref> {
    readonly attribute double level;

    readonly attribute boolean isCharging;
  };

  [NoInterfaceObject] interface SystemInfoCpu : <ref>SystemInfoProperty</ref> {
    readonly attribute double load;
  };

  [NoInterfaceObject] interface SystemInfoStorage : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoStorageUnit</ref>[] units;
  };

  [NoInterfaceObject] interface SystemInfoStorageUnit : <ref>SystemInfoProperty</ref> {
    readonly attribute DOMString type;

    readonly attribute unsigned long long capacity;

    readonly attribute unsigned long long availableCapacity;

    readonly attribute boolean isRemovable;

    readonly attribute boolean isRemoveable;
  };

  [NoInterfaceObject] interface SystemInfoDisplay : <ref>SystemInfoProperty</ref> {
    readonly attribute unsigned long resolutionWidth;

    readonly attribute unsigned long resolutionHeight;

    readonly attribute unsigned long dotsPerInchWidth;

    readonly attribute unsigned long dotsPerInchHeight;

    readonly attribute double physicalWidth;

    readonly attribute double physicalHeight;

    readonly attribute double brightness;
  };

  [NoInterfaceObject] interface SystemInfoDeviceOrientation : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoDeviceOrientationStatus</ref> status;

    readonly attribute boolean isAutoRotation;
  };

  [NoInterfaceObject] interface SystemInfoBuild : <ref>SystemInfoProperty</ref> {
    readonly attribute DOMString model;

    readonly attribute DOMString manufacturer;

    readonly attribute DOMString buildVersion;
  };

  [NoInterfaceObject] interface SystemInfoLocale : <ref>SystemInfoProperty</ref> {
    readonly attribute DOMString language;

    readonly attribute DOMString country;
  };

  [NoInterfaceObject] interface SystemInfoNetwork : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoNetworkType</ref> networkType;
  };

   [NoInterfaceObject] interface SystemInfoWifiNetwork : <ref>SystemInfoProperty</ref> {
    readonly attribute DOMString status;

    readonly attribute DOMString ssid;

    readonly attribute DOMString ipAddress;

    readonly attribute DOMString ipv6Address;

    readonly attribute DOMString macAddress;

    readonly attribute double signalStrength;
  };

  [NoInterfaceObject] interface SystemInfoCellularNetwork : <ref>SystemInfoProperty</ref> {

    readonly attribute DOMString status;

    readonly attribute DOMString apn;

    readonly attribute DOMString ipAddress;

    readonly attribute DOMString ipv6Address;

    readonly attribute unsigned short mcc;

    readonly attribute unsigned short mnc;

    readonly attribute unsigned short cellId;

    readonly attribute unsigned short lac;

    readonly attribute boolean isRoaming;

    readonly attribute boolean isFlightMode;

    readonly attribute DOMString imei raises(<ref>WebAPIException</ref>);
  };

  [NoInterfaceObject] interface SystemInfoSIM : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoSimState</ref> state raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString operatorName raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString msisdn raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString iccid raises(<ref>WebAPIException</ref>);

    readonly attribute unsigned short mcc raises(<ref>WebAPIException</ref>);

    readonly attribute unsigned short mnc raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString msin raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString spn raises(<ref>WebAPIException</ref>);
  };

  [NoInterfaceObject] interface SystemInfoPeripheral : <ref>SystemInfoProperty</ref> {
    readonly attribute boolean isVideoOutputOn;
  };

  [NoInterfaceObject] interface SystemInfoMemory : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoLowMemoryStatus</ref> status;

  };

  [NoInterfaceObject] interface SystemInfoVideoSourceInfo {

    readonly attribute <ref>SystemInfoVideoSourceType</ref> type;

     readonly attribute long number;
  };

  [NoInterfaceObject] interface SystemInfoVideoSource : <ref>SystemInfoProperty</ref> {

    readonly attribute <ref>SystemInfoVideoSourceInfo</ref>[] connected;

    readonly attribute <ref>SystemInfoVideoSourceInfo</ref>[] disconnected;
  };
};</webidl>
    <descriptive>
        <brief>
 This specification defines interfaces and methods that provide web applications with access to various properties of a system.
        </brief>
       <description>
        <p>
This API also provides interfaces and methods that can retrieve statuses of hardware devices, get the value of selected properties, and subscribe to asynchronous notifications of changes for selected values.
        </p>
        <p>
The following provides an overview of the tree data structure:
        </p>
        <ul>
          <li>
BATTERY          </li>
          <li>
CPU          </li>
          <li>
STORAGE          </li>
          <li>
DISPLAY          </li>
          <li>
DEVICE_ORIENTATION          </li>
          <li>
BUILD          </li>
          <li>
LOCALE          </li>
          <li>
NETWORK          </li>
          <li>
WIFI_NETWORK          </li>
          <li>
CELLULAR_NETWORK          </li>
          <li>
SIM          </li>
          <li>
PERIPHERAL          </li>
          <li>
VIDEOSOURCE (<b>Since</b>: 2.3)          </li>
          <li>
MEMORY          </li>
        </ul>
        <p>
Not all above properties may be available on every Tizen device. For instance, a device may not support the telephony feature. In that case, <var>CELLULAR_NETWORK</var> and <var>SIM</var> are not available.<br/><br/>To check the available <var>SystemInfoPropertyId</var>, <em>tizen.systeminfo.getCapability()</em> can be used.
        </p>
        <ul>
          <li>
 BATTERY          - tizen.systeminfo.getCapability(<em>&quot;http://tizen.org/feature/battery&quot;</em>)          </li>
          <li>
 DISPLAY          - tizen.systeminfo.getCapability(<em>&quot;http://tizen.org/feature/screen&quot;</em>)          </li>
          <li>
 WIFI_NETWORK     - tizen.systeminfo.getCapability(<em>&quot;http://tizen.org/feature/network.wifi&quot;</em>)          </li>
          <li>
 CELLULAR_NETWORK - tizen.systeminfo.getCapability(<em>&quot;http://tizen.org/feature/network.telephony&quot;</em>)          </li>
          <li>
 SIM              - tizen.systeminfo.getCapability(<em>&quot;http://tizen.org/feature/network.telephony&quot;</em>)          </li>
        </ul>
        <p>
For more information on the SystemInfo features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/sys_guide/systeminfo.htm">System Information Guide</a>.
        </p>
       </description>
        <version>
 1.0
        </version>
        <def-api-feature identifier="http://tizen.org/feature/battery">
          <descriptive>
           <description>
            <p>
To guarantee the running of the application(e.g. track the battery usage) on a device which has a battery, declare the following feature requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
        <def-api-feature identifier="http://tizen.org/feature/network.wifi">
          <descriptive>
           <description>
            <p>
To guarantee the running of this application on a device which supports Wi-Fi, declare the following feature requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
        <def-api-feature identifier="http://tizen.org/feature/network.telephony">
          <descriptive>
           <description>
            <p>
To guarantee the running of this application on a device which supports telephony feature, declare the following feature requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
    </descriptive>
    <Enum name="SystemInfoPropertyId" id="::SystemInfo::SystemInfoPropertyId">
      <webidl>  enum SystemInfoPropertyId { &quot;BATTERY&quot; , &quot;CPU&quot;, &quot;STORAGE&quot;, &quot;DISPLAY&quot;, &quot;DEVICE_ORIENTATION&quot;, &quot;BUILD&quot;, &quot;LOCALE&quot;, &quot;NETWORK&quot;, &quot;WIFI_NETWORK&quot;, &quot;CELLULAR_NETWORK&quot;, &quot;SIM&quot;, &quot;PERIPHERAL&quot;, &quot;MEMORY&quot;, &quot;VIDEOSOURCE&quot; };</webidl>
      <descriptive>
          <brief>
 The device property identifier.
          </brief>
          <version>
 2.0
          </version>
          <remark>
 <em>LOCALE</em> and <em>PERIPHERAL</em> are supported since Tizen 2.1
          </remark>
          <remark>
 <em>MEMORY</em> is supported since Tizen 2.3
          </remark>
          <remark>
 <em>VIDEOSOURCE</em> is supported since Tizen 2.3
          </remark>
      </descriptive>
      <EnumValue stringvalue="BATTERY">
        <webidl> &quot;BATTERY</webidl>
      </EnumValue>
      <EnumValue stringvalue="CPU">
        <webidl> &quot;CPU</webidl>
      </EnumValue>
      <EnumValue stringvalue="STORAGE">
        <webidl> &quot;STORAGE</webidl>
      </EnumValue>
      <EnumValue stringvalue="DISPLAY">
        <webidl> &quot;DISPLAY</webidl>
      </EnumValue>
      <EnumValue stringvalue="DEVICE_ORIENTATION">
        <webidl> &quot;DEVICE_ORIENTATION</webidl>
      </EnumValue>
      <EnumValue stringvalue="BUILD">
        <webidl> &quot;BUILD</webidl>
      </EnumValue>
      <EnumValue stringvalue="LOCALE">
        <webidl> &quot;LOCALE</webidl>
      </EnumValue>
      <EnumValue stringvalue="NETWORK">
        <webidl> &quot;NETWORK</webidl>
      </EnumValue>
      <EnumValue stringvalue="WIFI_NETWORK">
        <webidl> &quot;WIFI_NETWORK</webidl>
      </EnumValue>
      <EnumValue stringvalue="CELLULAR_NETWORK">
        <webidl> &quot;CELLULAR_NETWORK</webidl>
      </EnumValue>
      <EnumValue stringvalue="SIM">
        <webidl> &quot;SIM</webidl>
      </EnumValue>
      <EnumValue stringvalue="PERIPHERAL">
        <webidl> &quot;PERIPHERAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="MEMORY">
        <webidl> &quot;MEMORY</webidl>
      </EnumValue>
      <EnumValue stringvalue="VIDEOSOURCE">
        <webidl> &quot;VIDEOSOURCE</webidl>
      </EnumValue>
    </Enum>
    <Enum name="SystemInfoNetworkType" id="::SystemInfo::SystemInfoNetworkType">
      <webidl>  enum SystemInfoNetworkType { &quot;NONE&quot;, &quot;2G&quot;, &quot;2.5G&quot;, &quot;3G&quot;, &quot;4G&quot;, &quot;WIFI&quot;, &quot;ETHERNET&quot;, &quot;UNKNOWN&quot; };</webidl>
      <descriptive>
          <brief>
 Data Network Type.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <EnumValue stringvalue="NONE">
        <webidl> &quot;NONE</webidl>
      </EnumValue>
      <EnumValue stringvalue="2G">
        <webidl> &quot;2G</webidl>
      </EnumValue>
      <EnumValue stringvalue="2.5G">
        <webidl> &quot;2.5G</webidl>
      </EnumValue>
      <EnumValue stringvalue="3G">
        <webidl> &quot;3G</webidl>
      </EnumValue>
      <EnumValue stringvalue="4G">
        <webidl> &quot;4G</webidl>
      </EnumValue>
      <EnumValue stringvalue="WIFI">
        <webidl> &quot;WIFI</webidl>
      </EnumValue>
      <EnumValue stringvalue="ETHERNET">
        <webidl> &quot;ETHERNET</webidl>
      </EnumValue>
      <EnumValue stringvalue="UNKNOWN">
        <webidl> &quot;UNKNOWN</webidl>
      </EnumValue>
    </Enum>
    <Enum name="SystemInfoDeviceOrientationStatus" id="::SystemInfo::SystemInfoDeviceOrientationStatus">
      <webidl>  enum SystemInfoDeviceOrientationStatus { &quot;PORTRAIT_PRIMARY&quot;, &quot;PORTRAIT_SECONDARY&quot;, &quot;LANDSCAPE_PRIMARY&quot;, &quot;LANDSCAPE_SECONDARY&quot; };</webidl>
      <descriptive>
          <brief>
 Device Orientation Status.
          </brief>
          <version>
 2.0
          </version>
         <description>
          <p>
SystemInfo reports the orientation of the device depending on the type of the device and physical position of the device relative to vertical direction.
A &quot;phone type device&quot; is a device for which the portrait position is the natural orientation.
A &quot;tab type device&quot; is a device for which the landscape position is basic working orientation.
          </p>
          <table>
            <tr>
              <th>
SystemInfoDeviceOrientationStatus              </th>
              <th>
phone type device              </th>
              <th>
tablet type device              </th>
            </tr>
            <tr>
              <td>
PORTRAIT_PRIMARY              </td>
              <td>
natural position              </td>
              <td>
rotated 90 degrees right (clockwise)              </td>
            </tr>
            <tr>
              <td>
PORTRAIT_SECONDARY              </td>
              <td>
upside down, in other words rotated 180 degrees              </td>
              <td>
rotated 90 degrees left (anticlockwise)              </td>
            </tr>
            <tr>
              <td>
LANDSCAPE_PRIMARY              </td>
              <td>
rotated 90 degrees left (anticlockwise)              </td>
              <td>
natural position              </td>
            </tr>
            <tr>
              <td>
LANDSCAPE_SECONDARY              </td>
              <td>
rotated 90 degrees right (clockwise)              </td>
              <td>
upside down, in other words rotated 180 degrees              </td>
            </tr>
          </table>
         </description>
      </descriptive>
      <EnumValue stringvalue="PORTRAIT_PRIMARY">
        <webidl> &quot;PORTRAIT_PRIMARY</webidl>
      </EnumValue>
      <EnumValue stringvalue="PORTRAIT_SECONDARY">
        <webidl> &quot;PORTRAIT_SECONDARY</webidl>
      </EnumValue>
      <EnumValue stringvalue="LANDSCAPE_PRIMARY">
        <webidl> &quot;LANDSCAPE_PRIMARY</webidl>
      </EnumValue>
      <EnumValue stringvalue="LANDSCAPE_SECONDARY">
        <webidl> &quot;LANDSCAPE_SECONDARY</webidl>
      </EnumValue>
    </Enum>
    <Enum name="SystemInfoSimState" id="::SystemInfo::SystemInfoSimState">
      <webidl>  enum SystemInfoSimState { &quot;ABSENT&quot;, &quot;INITIALIZING&quot;, &quot;READY&quot;, &quot;PIN_REQUIRED&quot;, &quot;PUK_REQUIRED&quot;, &quot;NETWORK_LOCKED&quot;, &quot;SIM_LOCKED&quot;, &quot;UNKNOWN&quot; };</webidl>
      <descriptive>
          <brief>
 Sim State.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <EnumValue stringvalue="ABSENT">
        <webidl> &quot;ABSENT</webidl>
      </EnumValue>
      <EnumValue stringvalue="INITIALIZING">
        <webidl> &quot;INITIALIZING</webidl>
      </EnumValue>
      <EnumValue stringvalue="READY">
        <webidl> &quot;READY</webidl>
      </EnumValue>
      <EnumValue stringvalue="PIN_REQUIRED">
        <webidl> &quot;PIN_REQUIRED</webidl>
      </EnumValue>
      <EnumValue stringvalue="PUK_REQUIRED">
        <webidl> &quot;PUK_REQUIRED</webidl>
      </EnumValue>
      <EnumValue stringvalue="NETWORK_LOCKED">
        <webidl> &quot;NETWORK_LOCKED</webidl>
      </EnumValue>
      <EnumValue stringvalue="SIM_LOCKED">
        <webidl> &quot;SIM_LOCKED</webidl>
      </EnumValue>
      <EnumValue stringvalue="UNKNOWN">
        <webidl> &quot;UNKNOWN</webidl>
      </EnumValue>
    </Enum>
    <Enum name="SystemInfoProfile" id="::SystemInfo::SystemInfoProfile">
      <webidl>  enum SystemInfoProfile { &quot;MOBILE_FULL&quot;, &quot;MOBILE_WEB&quot;, &quot;MOBILE&quot;, &quot;WEARABLE&quot;, &quot;TV&quot; };</webidl>
      <descriptive>
          <brief>
 Device Profile.
          </brief>
          <version>
 2.2
          </version>
          <remark>
 <em>&quot;MOBILE&quot;</em> and <em>&quot;WEARABLE&quot;</em> are supported since Tizen 2.3
          </remark>
          <deprecated>
 <em>&quot;MOBILE_FULL&quot;</em> and <em>&quot;MOBILE_WEB&quot;</em> are deprecated since Tizen 2.3 and will be removed in Tizen 3.0. <br/>Beginning with Tizen 2.3, <em>&quot;MOBILE&quot;</em> is returned instead of <em>&quot;MOBILE_FULL&quot;</em>.
          </deprecated>
          <remark>
 <em>TV</em> is supported since Tizen 2.3.
          </remark>
      </descriptive>
      <EnumValue stringvalue="MOBILE_FULL">
        <webidl> &quot;MOBILE_FULL</webidl>
      </EnumValue>
      <EnumValue stringvalue="MOBILE_WEB">
        <webidl> &quot;MOBILE_WEB</webidl>
      </EnumValue>
      <EnumValue stringvalue="MOBILE">
        <webidl> &quot;MOBILE</webidl>
      </EnumValue>
      <EnumValue stringvalue="WEARABLE">
        <webidl> &quot;WEARABLE</webidl>
      </EnumValue>
      <EnumValue stringvalue="TV">
        <webidl> &quot;TV</webidl>
      </EnumValue>
    </Enum>
    <Enum name="SystemInfoLowMemoryStatus" id="::SystemInfo::SystemInfoLowMemoryStatus">
      <webidl>  enum SystemInfoLowMemoryStatus { &quot;NORMAL&quot;, &quot;WARNING&quot; };</webidl>
      <descriptive>
          <brief>
 The low memory state of a device.
          </brief>
         <description>
          <ul>
            <li>
NORMAL - indicating the remaining memory is sufficient for an application to run             </li>
            <li>
WARNING - indicating the remaining memory is insufficient. Low memory warnings may happen differently according to the system.             </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="NORMAL">
        <webidl> &quot;NORMAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="WARNING">
        <webidl> &quot;WARNING</webidl>
      </EnumValue>
    </Enum>
    <Enum name="SystemInfoVideoSourceType" id="::SystemInfo::SystemInfoVideoSourceType">
      <webidl>  enum SystemInfoVideoSourceType {
      &quot;TV&quot;,
      &quot;AV&quot;,
      &quot;SVIDEO&quot;,
      &quot;COMP&quot;,
      &quot;PC&quot;,
      &quot;HDMI&quot;,
      &quot;SCART&quot;,
      &quot;DVI&quot;,
      &quot;MEDIA&quot;
  };</webidl>
      <descriptive>
          <brief>
 An enumerator to indicate the type of video source
          </brief>
         <description>
          <ul>
            <li>
 TV - The input source from TV             </li>
            <li>
 AV - The input source from Component video, three cables, each with RCA plugs (3 or more channels)            </li>
            <li>
 SVIDEO - S-Video(Super-Video) and Y/C (2 channels)             </li>
            <li>
 COMP - The input source from Composite video (1 channel)             </li>
            <li>
 PC - The input source from personal computer (15-pin VGA connector)             </li>
            <li>
 HDMI - The input source from HDMI(High-Definition Multimedia Interface)             </li>
            <li>
 SCART - The input source from SCART(21-pin connector)             </li>
            <li>
 DVI - The input source from DVI(Digital Visual Interface)             </li>
            <li>
 MEDIA - The input source from media             </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="TV">
        <webidl>      &quot;TV</webidl>
      </EnumValue>
      <EnumValue stringvalue="AV">
        <webidl>      &quot;AV</webidl>
      </EnumValue>
      <EnumValue stringvalue="SVIDEO">
        <webidl>      &quot;SVIDEO</webidl>
      </EnumValue>
      <EnumValue stringvalue="COMP">
        <webidl>      &quot;COMP</webidl>
      </EnumValue>
      <EnumValue stringvalue="PC">
        <webidl>      &quot;PC</webidl>
      </EnumValue>
      <EnumValue stringvalue="HDMI">
        <webidl>      &quot;HDMI</webidl>
      </EnumValue>
      <EnumValue stringvalue="SCART">
        <webidl>      &quot;SCART</webidl>
      </EnumValue>
      <EnumValue stringvalue="DVI">
        <webidl>      &quot;DVI</webidl>
      </EnumValue>
      <EnumValue stringvalue="MEDIA">
        <webidl>      &quot;MEDIA</webidl>
      </EnumValue>
    </Enum>
    <Interface name="SystemInfoObject" id="::SystemInfo::SystemInfoObject">
      <webidl>  [NoInterfaceObject] interface SystemInfoObject {
    readonly attribute <ref>SystemInfo</ref> systeminfo;
  };</webidl>
      <descriptive>
          <brief>
 Defines what is instantiated by the <em>Tizen </em>object from the Tizen Platform.
          </brief>
         <description>
          <p>
There will be a tizen.systeminfo object that allows accessing the
functionality of the SystemInfo API.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="systeminfo" id="::SystemInfo::SystemInfoObject::systeminfo">
        <webidl>    readonly attribute <ref>SystemInfo</ref> systeminfo;</webidl>
        <Type name="SystemInfo"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="SystemInfoObject">
      <webidl>  <ref>Tizen</ref> implements <ref>SystemInfoObject</ref>;</webidl>
    </Implements>
    <Interface name="SystemInfo" id="::SystemInfo::SystemInfo">
      <webidl>  [NoInterfaceObject] interface SystemInfo {
    long long getTotalMemory() raises(<ref>WebAPIException</ref>);

    long long getAvailableMemory() raises(<ref>WebAPIException</ref>);

    <ref>SystemInfoDeviceCapability</ref> getCapabilities() raises(<ref>WebAPIException</ref>);

    any getCapability(DOMString key) raises(<ref>WebAPIException</ref>);

    long getCount(<ref>SystemInfoPropertyId</ref> property) raises(<ref>WebAPIException</ref>);

    void getPropertyValue(<ref>SystemInfoPropertyId</ref> property,
                          <ref>SystemInfoPropertySuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void getPropertyValueArray(<ref>SystemInfoPropertyId</ref> property,
                          <ref>SystemInfoPropertyArraySuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    unsigned long addPropertyValueChangeListener(<ref>SystemInfoPropertyId</ref> property,
                                        <ref>SystemInfoPropertySuccessCallback</ref> successCallback,
                                        optional <ref>SystemInfoOptions</ref>? options,
                                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    unsigned long addPropertyValueArrayChangeListener(<ref>SystemInfoPropertyId</ref> property,
                                        <ref>SystemInfoPropertyArraySuccessCallback</ref> successCallback,
                                        optional <ref>SystemInfoOptions</ref>? options,
                                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

    void removePropertyValueChangeListener(unsigned long listenerId) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 This entry interface queries the information of a system.
          </brief>
         <description>
          <p>
This API offers methods for retrieving system information
and for subscribing notifications of system information changes.
          </p>
         </description>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="getTotalMemory" id="::SystemInfo::SystemInfo::getTotalMemory">
        <webidl>    long long getTotalMemory() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the total amount of system memory (in bytes).
            </brief>
            <version>
 2.3
            </version>
            <Code> // To get total amount of system memory
 console.log(&quot;The total memory size is &quot; + tizen.systeminfo.getTotalMemory() + &quot; bytes.&quot;);
 </Code>
        </descriptive>
        <Type type="long long"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError in any error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAvailableMemory" id="::SystemInfo::SystemInfo::getAvailableMemory">
        <webidl>    long long getAvailableMemory() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the amount of memory that is not in use (in bytes).
            </brief>
            <version>
 2.3
            </version>
            <Code> // To get total amount of system memory
 console.log(&quot;The available memory size is &quot; + tizen.systeminfo.getAvailableMemory() + &quot; bytes.&quot;);
 </Code>
        </descriptive>
        <Type type="long long"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError in any error case
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getCapabilities" id="::SystemInfo::SystemInfo::getCapabilities">
        <webidl>    <ref>SystemInfoDeviceCapability</ref> getCapabilities() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the capabilities of the device.
            </brief>
           <description>
            <p>
The function must synchronously acquire the capabilities of the device.
            </p>
           </description>
            <version>
 2.0
            </version>
            <Code> var deviceCapabilities;
 deviceCapabilities = tizen.systeminfo.getCapabilities();
 if (deviceCapabilities.bluetooth) {
     console.log(&quot;Bluetooth is supported&quot;);
 }
 </Code>
            <deprecated>
 getCapabilities() is deprecated since Tizen 2.3.
It is recommended to use the getCapability() method (since Tizen 2.3) instead.
            </deprecated>
        </descriptive>
        <Type name="SystemInfoDeviceCapability"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError in any error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getCapability" id="::SystemInfo::SystemInfo::getCapability">
        <webidl>    any getCapability(DOMString key) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets a device capability related to a given key.
            </brief>
           <description>
            <p>
See the available <a href="./systeminfo_capability_keys.html">device capability keys</a>.
            </p>
           </description>
            <version>
 2.3
            </version>
            <Code> try {
     // Checks if a device supports bluetooth API or not
     var bluetooth = tizen.systeminfo.getCapability(&quot;http://tizen.org/feature/network.bluetooth&quot;);
     console.log(&quot; Bluetooth = &quot; + bluetooth);
 } catch (error) {
     console.log(&quot;Error name: &quot; + error.name + &quot;, message: &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="any">
          <descriptive>
              <description><p>
 any The value of the specified device capability
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="key">
            <descriptive>
                <description><p>
 The device capability key for the device
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getCount" id="::SystemInfo::SystemInfo::getCount">
        <webidl>    long getCount(<ref>SystemInfoPropertyId</ref> property) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the number of system property information provided for a particular system property.
            </brief>
           <description>
            <p>
That is the length of array retrieved by the getPropertyValueArray() method for the given property.
            </p>
           </description>
            <version>
 2.3
            </version>
            <Code> var count = tizen.systeminfo.getCount(&quot;SIM&quot;);
 if (count === 0) {
     console.log(&quot;There is no available SIM card.&quot;);
 } else {
     console.log(&quot;There is(are) &quot; + count + &quot; SIM card(s) available.&quot;);
 }
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The number of property values for the given property. If the property is not supported, 0 is returned.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="property">
            <descriptive>
                <description><p>
 The name of the system property
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertyId"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getPropertyValue" id="::SystemInfo::SystemInfo::getPropertyValue">
        <webidl>    void getPropertyValue(<ref>SystemInfoPropertyId</ref> property,
                          <ref>SystemInfoPropertySuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the current value of a specified system property.
            </brief>
           <description>
            <p>
The function must asynchronously acquire the current value of the requested property. If it is successful,
the successCallback must be invoked with an object containing the information provided by the property.
            </p>
            <p>
The <em>ErrorCallback</em> method can be launched with these error types:
            </p>
            <ul>
              <li>
NotSupportedError - If the given <var>property</var> is not supported. (since Tizen 2.3)              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <Code> function onSuccessCallback(cpu) {
     console.log(&quot;The cpu load is &quot; + cpu.load);
 }

 function onErrorCallback(error) {
     console.log(&quot;An error occurred &quot; + error.message);
 }

 tizen.systeminfo.getPropertyValue(&quot;CPU&quot;, onSuccessCallback, onErrorCallback);
 </Code>
            <Code> function onSuccessCallback(cellular) {
     console.log(&quot;The status of the cellular network is &quot; + cellular.status);
 }

 function onErrorCallback(error) {
     console.log(&quot;An error occurred &quot; + error.message);
     // if telephony_capability is false but getPropertyValue(&quot;CELLULAR_NETWORK, ..) is called, NotSupportedError would be passed.
 }

 var telephony_capability = tizen.systeminfo.getCapability(&quot;http://tizen.org/feature/network.telephony&quot;);

 if (telephony_capability === true) {
     // onSuccessCallback will be invoked.
     tizen.systeminfo.getPropertyValue(&quot;CELLULAR_NETWORK&quot;, onSuccessCallback, onErrorCallback);
 } else {
     console.log(&quot;Telephony feature is not supported. Cellular network related information cannot be retrieved.&quot;);
 }
 </Code>
            <remark>
 If the given <var>property</var> is not supported, <em>NotSupportedError</em> would be passed through a <em>ErrorCallback()</em> since Tizen 2.3.
            </remark>
            <remark>
 If system provides more than one value for the system property, the primary(first) system property is returned through SystemInfoSuccessCallback.
            </remark>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="property">
            <descriptive>
                <description><p>
 The name of the property to retrieve.
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertyId"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Function called when the properties have been successfully retrieved.
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Function called when an error occurred while retrieving the properties.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getPropertyValueArray" id="::SystemInfo::SystemInfo::getPropertyValueArray">
        <webidl>    void getPropertyValueArray(<ref>SystemInfoPropertyId</ref> property,
                          <ref>SystemInfoPropertyArraySuccessCallback</ref> successCallback,
                          optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the current values of a specified system property.
            </brief>
           <description>
            <p>
It is recommended that you check if a device provides one or more than one value for a particular system property via getCount().
            </p>
            <p>
If one particular system property is provided on a device, it returns an array containing one SystemInfoProperty object through <em>SystemInfoPropertyArraySuccessCallback</em> method.<br/>If more than one particular system property is provided, multiple SystemInfoProperty objects are returned.
            </p>
            <p>
The <em>ErrorCallback</em> method can be launched with these error types:
            </p>
            <ul>
              <li>
NotSupportedError - If the given <var>property</var> is not supported.              </li>
            </ul>
           </description>
            <remark>
 see getCount().
            </remark>
            <version>
 2.3
            </version>
            <Code> function successCB(property) {
     console.log(&quot;The SIM's current state is &quot; + property.state);
 }

 function successArrayCB(properties) {
     console.log(&quot;The number of the returned system properties is &quot; + properties.length);
     for (var i = 0; i &#60; properties.length; i++) {
         console.log(&quot;[&quot; + i + &quot;] SIM's state is &quot; + properties[i].state);
     }
 }

 var count = tizen.systeminfo.getCount(&quot;SIM&quot;);
 if (count === 0) {
     console.log(&quot;This device does not provide SIM card.&quot;);
 } else if (count > 1) {
     tizen.systeminfo.getPropertyValueArray(&quot;SIM&quot;, successArrayCB);
 } else {
     tizen.systeminfo.getPropertyValue(&quot;SIM&quot;, successCB);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="property">
            <descriptive>
                <description><p>
 The name of the property to retrieve.
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertyId"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Callback method that is invoked when the properties have been successfully retrieved.
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertyArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Callback method that is invoked when an error occurs while retrieving the properties.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="addPropertyValueChangeListener" id="::SystemInfo::SystemInfo::addPropertyValueChangeListener">
        <webidl>    unsigned long addPropertyValueChangeListener(<ref>SystemInfoPropertyId</ref> property,
                                        <ref>SystemInfoPropertySuccessCallback</ref> successCallback,
                                        optional <ref>SystemInfoOptions</ref>? options,
                                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds a listener to allow tracking of changes in one or more system properties.
            </brief>
           <description>
            <p>
When called, it immediately returns and then asynchronously starts a watch process defined by the following steps:
            </p>
            <p>
1. Register the successCallback to receive system events that the status of the requested properties may have changed.
            </p>
            <p>
2. When a system event is successfully received invoke the associated successCallback with an object containing the property
values.
            </p>
            <p>
3. Repeat step 2 until removePropertyValueChangeListener function is called.
            </p>
            <p>
There are device properties which are never changed (e.g. &quot;BUILD&quot;) and properties which are not changed on some devices
(e.g. &quot;DEVICE_ORIENTATION&quot; in Tizen TV device). The <em>addPropertyValueChangeListener()</em> method accepts
any identifier of these properties, but the listener added for them will not be invoked.
            </p>
           </description>
            <remark>
 The <em>errorCallback()</em> is newly added as an optional parameter since Tizen 2.3.
            </remark>
           <description>
            <p>
The <em>errorCallback</em> can be launched with any of these error types:
            </p>
            <ul>
              <li>
NotSupportedError - If the given <var>property</var> is not supported. (since Tizen 2.3)<br/>For example, monitoring <var>CELLULAR_NETWORK</var> changes is not supported on a device which does not support the telephony feature.
              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
            <Code> function onSuccessCallback(cpu) {
     console.log(&quot;The cpu load : &quot; + cpu.load);
 }

 tizen.systeminfo.addPropertyValueChangeListener(&quot;CPU&quot;, onSuccessCallback, {lowThreshold : 0.2});
 </Code>
        </descriptive>
        <Type type="unsigned long">
          <descriptive>
              <description><p>
 unsigned long An identifier used to clear the watch subscription.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="property">
            <descriptive>
                <description><p>
 The name of the property to retrieve.
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertyId"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Function called when the properties have been successfully retrieved.
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="options">
            <descriptive>
                <description><p>
 An object containing the various options for fetching the properties requested. See <a href="./systeminfo.html#::SystemInfo::SystemInfoOptions">details</a>.
                </p></description>
            </descriptive>
            <Type name="SystemInfoOptions" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Function called when an error occurred.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value (e.g. the invalid value for <em>options</em>).
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="addPropertyValueArrayChangeListener" id="::SystemInfo::SystemInfo::addPropertyValueArrayChangeListener">
        <webidl>    unsigned long addPropertyValueArrayChangeListener(<ref>SystemInfoPropertyId</ref> property,
                                        <ref>SystemInfoPropertyArraySuccessCallback</ref> successCallback,
                                        optional <ref>SystemInfoOptions</ref>? options,
                                        optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds a listener to allow tracking of changes in one or more values of a system property.
            </brief>
           <description>
            <p>
The <em>ErrorCallback</em> method can be launched with these error types:
            </p>
            <ul>
              <li>
NotSupportedError - If the given <var>property</var> is not supported. (since Tizen 2.3)<br/>For example, monitoring <var>CELLULAR_NETWORK</var> changes is not supported on a device which does not support the telephony feature.
              </li>
            </ul>
            <p>
There are device properties which never change (for example &quot;BUILD&quot;) and properties which do not change on the current platform
(for example &quot;DEVICE_ORIENTATION&quot; for some platforms). The <em>addPropertyValueChangeListener()</em> method accepts
any identifier of these properties, but the listener added for them will not be invoked.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="unsigned long">
          <descriptive>
              <description><p>
 unsigned long An identifier used to clear the watch subscription.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="property">
            <descriptive>
                <description><p>
 The name of the property to retrieve.
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertyId"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 Function called when the properties have been successfully retrieved.
                </p></description>
            </descriptive>
            <Type name="SystemInfoPropertyArraySuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="options">
            <descriptive>
                <description><p>
 An object containing the various options for fetching the properties requested.
                </p></description>
            </descriptive>
            <Type name="SystemInfoOptions" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 Function called when an error occurred.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value (e.g. the invalid value for <em>options</em>).
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removePropertyValueChangeListener" id="::SystemInfo::SystemInfo::removePropertyValueChangeListener">
        <webidl>    void removePropertyValueChangeListener(unsigned long listenerId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Unsubscribes notifications for property changes.
            </brief>
           <description>
            <p>
If a valid listenerId argument is passed that corresponds to a subscription
already place, then the watch process MUST immediately terminate and no further
callback is invoked. If the listenerId argument does not correspond to a valid subscription,
the method should return without any further action.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> var id = null;
 function onSuccessCallback(cpu) {
    console.log(&quot;New value for CPU load is &quot; + cpu.load);
    if (id != null) { // After receiving the first notification, we clear it
        tizen.systeminfo.removePropertyValueChangeListener(id);
    }
 }

 id = tizen.systeminfo.addPropertyValueChangeListener(&quot;CPU&quot;, onSuccessCallback);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="listenerId">
            <descriptive>
                <description><p>
 An identifier of the subscription returned by the addPropertyValueChangeListener()/addPropertyValueArrayChangeListener() method.
                </p></description>
            </descriptive>
            <Type type="unsigned long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input
parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="SystemInfoDeviceCapability" id="::SystemInfo::SystemInfoDeviceCapability">
      <webidl>  [NoInterfaceObject] interface SystemInfoDeviceCapability {
    readonly attribute boolean bluetooth;

    readonly attribute boolean nfc;

    readonly attribute boolean nfcReservedPush ;

    readonly attribute unsigned short multiTouchCount;

    readonly attribute boolean inputKeyboard;

    readonly attribute boolean inputKeyboardLayout;

    readonly attribute boolean wifi;

    readonly attribute boolean wifiDirect;

    readonly attribute boolean opengles;

    readonly attribute DOMString openglestextureFormat;

    readonly attribute boolean openglesVersion1_1;

    readonly attribute boolean openglesVersion2_0;

    readonly attribute boolean fmRadio;

    readonly attribute DOMString platformVersion raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString webApiVersion raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString nativeApiVersion raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString platformName;

    readonly attribute boolean camera;

    readonly attribute boolean cameraFront;

    readonly attribute boolean cameraFrontFlash;

    readonly attribute boolean cameraBack;

    readonly attribute boolean cameraBackFlash;

    readonly attribute boolean location;

    readonly attribute boolean locationGps;

    readonly attribute boolean locationWps;

    readonly attribute boolean microphone;

    readonly attribute boolean usbHost;

    readonly attribute boolean usbAccessory;

    readonly attribute boolean screenOutputRca;

    readonly attribute boolean screenOutputHdmi;

    readonly attribute DOMString platformCoreCpuArch;

    readonly attribute DOMString platformCoreFpuArch;

    readonly attribute boolean sipVoip;

    readonly attribute DOMString duid;

    readonly attribute boolean speechRecognition;

    readonly attribute boolean speechSynthesis;

    readonly attribute boolean accelerometer;

    readonly attribute boolean accelerometerWakeup;

    readonly attribute boolean barometer;

    readonly attribute boolean barometerWakeup;

    readonly attribute boolean gyroscope;

    readonly attribute boolean gyroscopeWakeup;

    readonly attribute boolean magnetometer;

    readonly attribute boolean magnetometerWakeup;

    readonly attribute boolean photometer;

    readonly attribute boolean photometerWakeup;

    readonly attribute boolean proximity;

    readonly attribute boolean proximityWakeup;

    readonly attribute boolean tiltmeter;

    readonly attribute boolean tiltmeterWakeup;

    readonly attribute boolean dataEncryption;

    readonly attribute boolean graphicsAcceleration;

    readonly attribute boolean push;

    readonly attribute boolean telephony;

    readonly attribute boolean telephonyMms;

    readonly attribute boolean telephonySms;

    readonly attribute boolean screenSizeNormal;

    readonly attribute boolean screenSize480_800;

    readonly attribute boolean screenSize720_1280;

    readonly attribute boolean autoRotation;

    readonly attribute boolean shellAppWidget;

    readonly attribute boolean visionImageRecognition;

    readonly attribute boolean visionQrcodeGeneration;

    readonly attribute boolean visionQrcodeRecognition;

    readonly attribute boolean visionFaceRecognition;

    readonly attribute boolean secureElement;

    readonly attribute boolean nativeOspCompatible;

    readonly attribute <ref>SystemInfoProfile</ref> profile;
  };</webidl>
      <descriptive>
          <brief>
 SystemInfoDeviceCapability object.
          </brief>
          <version>
 2.0
          </version>
          <deprecated>
 SystemInfoDeviceCapability is deprecated since Tizen 2.3 and will be removed in Tizen 3.0.
It is recommended to use the getCapability() method (since Tizen 2.3) instead to query device capabilities.
          </deprecated>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="bluetooth" id="::SystemInfo::SystemInfoDeviceCapability::bluetooth">
        <webidl>    readonly attribute boolean bluetooth;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Bluetooth.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="nfc" id="::SystemInfo::SystemInfoDeviceCapability::nfc">
        <webidl>    readonly attribute boolean nfc;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports NFC.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="nfcReservedPush" id="::SystemInfo::SystemInfoDeviceCapability::nfcReservedPush">
        <webidl>    readonly attribute boolean nfcReservedPush ;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports NFC reserved push.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="multiTouchCount" id="::SystemInfo::SystemInfoDeviceCapability::multiTouchCount">
        <webidl>    readonly attribute unsigned short multiTouchCount;</webidl>
        <descriptive>
            <brief>
 The number of point in Multi-point touch.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Attribute>
      <Attribute readonly="readonly" name="inputKeyboard" id="::SystemInfo::SystemInfoDeviceCapability::inputKeyboard">
        <webidl>    readonly attribute boolean inputKeyboard;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports the built-in Keyboard.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="inputKeyboardLayout" id="::SystemInfo::SystemInfoDeviceCapability::inputKeyboardLayout">
        <webidl>    readonly attribute boolean inputKeyboardLayout;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports the built-in keyboard layout.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="wifi" id="::SystemInfo::SystemInfoDeviceCapability::wifi">
        <webidl>    readonly attribute boolean wifi;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Wi-Fi.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="wifiDirect" id="::SystemInfo::SystemInfoDeviceCapability::wifiDirect">
        <webidl>    readonly attribute boolean wifiDirect;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Wi-Fi direct.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="opengles" id="::SystemInfo::SystemInfoDeviceCapability::opengles">
        <webidl>    readonly attribute boolean opengles;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports OpenGL-ES.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="openglestextureFormat" id="::SystemInfo::SystemInfoDeviceCapability::openglestextureFormat">
        <webidl>    readonly attribute DOMString openglestextureFormat;</webidl>
        <descriptive>
            <brief>
 The device 3DC texture format for OpenGL-ES.
One example of possible output is as follows: &quot;3dc/atc/etc/ptc/pvrtc/utc&quot;
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="openglesVersion1_1" id="::SystemInfo::SystemInfoDeviceCapability::openglesVersion1_1">
        <webidl>    readonly attribute boolean openglesVersion1_1;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports OpenGL-ES version 1.1.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="openglesVersion2_0" id="::SystemInfo::SystemInfoDeviceCapability::openglesVersion2_0">
        <webidl>    readonly attribute boolean openglesVersion2_0;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports OpenGL-ES version 2.0.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="fmRadio" id="::SystemInfo::SystemInfoDeviceCapability::fmRadio">
        <webidl>    readonly attribute boolean fmRadio;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports FM radio.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="platformVersion" id="::SystemInfo::SystemInfoDeviceCapability::platformVersion">
        <webidl>    readonly attribute DOMString platformVersion raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 The version of the platform in the <em>[Major].[Minor].[Patch Version] </em> format. <br/>For example, <var>1.0.0 </var> represents a platform version where the major version is <var>1 </var>and the minor and build versions are <var>0</var>.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="webApiVersion" id="::SystemInfo::SystemInfoDeviceCapability::webApiVersion">
        <webidl>    readonly attribute DOMString webApiVersion raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 The version of the Web API in the <em>[Major].[Minor] </em> format. <br/>For example, <var>1.0 </var>represents a web api version where the major version is <var>1 </var> and the minor version is <var>0</var>.
            </brief>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="nativeApiVersion" id="::SystemInfo::SystemInfoDeviceCapability::nativeApiVersion">
        <webidl>    readonly attribute DOMString nativeApiVersion raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 The version of the native API in the <em>[Major].[Minor] </em>format.<br/>            </brief>
           <description>
            <p>
For example, <var>1.0</var> represents a native api version where the major version is <var>1 </var>and the minor version is <var>0</var>.
If a device doesn't provide Tizen native API, nativeApiVersion will be a empty string.
            </p>
           </description>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="platformName" id="::SystemInfo::SystemInfoDeviceCapability::platformName">
        <webidl>    readonly attribute DOMString platformName;</webidl>
        <descriptive>
            <brief>
 The name of the platform.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="camera" id="::SystemInfo::SystemInfoDeviceCapability::camera">
        <webidl>    readonly attribute boolean camera;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports camera.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="cameraFront" id="::SystemInfo::SystemInfoDeviceCapability::cameraFront">
        <webidl>    readonly attribute boolean cameraFront;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports front camera.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="cameraFrontFlash" id="::SystemInfo::SystemInfoDeviceCapability::cameraFrontFlash">
        <webidl>    readonly attribute boolean cameraFrontFlash;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports flash on the front camera.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="cameraBack" id="::SystemInfo::SystemInfoDeviceCapability::cameraBack">
        <webidl>    readonly attribute boolean cameraBack;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports back-side camera.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="cameraBackFlash" id="::SystemInfo::SystemInfoDeviceCapability::cameraBackFlash">
        <webidl>    readonly attribute boolean cameraBackFlash;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports flash on the back-side camera.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="location" id="::SystemInfo::SystemInfoDeviceCapability::location">
        <webidl>    readonly attribute boolean location;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports GPS or not.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="locationGps" id="::SystemInfo::SystemInfoDeviceCapability::locationGps">
        <webidl>    readonly attribute boolean locationGps;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports GPS based location feature.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="locationWps" id="::SystemInfo::SystemInfoDeviceCapability::locationWps">
        <webidl>    readonly attribute boolean locationWps;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports WPS based location feature.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="microphone" id="::SystemInfo::SystemInfoDeviceCapability::microphone">
        <webidl>    readonly attribute boolean microphone;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports microphone.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="usbHost" id="::SystemInfo::SystemInfoDeviceCapability::usbHost">
        <webidl>    readonly attribute boolean usbHost;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports USB host.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="usbAccessory" id="::SystemInfo::SystemInfoDeviceCapability::usbAccessory">
        <webidl>    readonly attribute boolean usbAccessory;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports USB accessory.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="screenOutputRca" id="::SystemInfo::SystemInfoDeviceCapability::screenOutputRca">
        <webidl>    readonly attribute boolean screenOutputRca;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports RCA output.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="screenOutputHdmi" id="::SystemInfo::SystemInfoDeviceCapability::screenOutputHdmi">
        <webidl>    readonly attribute boolean screenOutputHdmi;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports HDMI output.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="platformCoreCpuArch" id="::SystemInfo::SystemInfoDeviceCapability::platformCoreCpuArch">
        <webidl>    readonly attribute DOMString platformCoreCpuArch;</webidl>
        <descriptive>
            <brief>
 The device CPU architecture.
The possible values for this attribute are: armv6, armv7, x86.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="platformCoreFpuArch" id="::SystemInfo::SystemInfoDeviceCapability::platformCoreFpuArch">
        <webidl>    readonly attribute DOMString platformCoreFpuArch;</webidl>
        <descriptive>
            <brief>
 The device FPU architecture.
The possible values for this attribute are: vfpv3 / sse2 / sse3 / ssse3.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="sipVoip" id="::SystemInfo::SystemInfoDeviceCapability::sipVoip">
        <webidl>    readonly attribute boolean sipVoip;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports VOIP.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="duid" id="::SystemInfo::SystemInfoDeviceCapability::duid">
        <webidl>    readonly attribute DOMString duid;</webidl>
        <descriptive>
            <brief>
 Indicates the Tizen ID, not device's unique ID since Tizen 2.3.
            </brief>
            <remark>
 Tizen ID is a randomly generated value based on the model name. <br/>It is recommended to use tizen.systeminfo.getCapability(&quot;http://tizen.org/system/tizenid&quot;) since Tizen 2.3 instead.
            </remark>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="speechRecognition" id="::SystemInfo::SystemInfoDeviceCapability::speechRecognition">
        <webidl>    readonly attribute boolean speechRecognition;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports speech recognition.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="speechSynthesis" id="::SystemInfo::SystemInfoDeviceCapability::speechSynthesis">
        <webidl>    readonly attribute boolean speechSynthesis;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports speech synthesis.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="accelerometer" id="::SystemInfo::SystemInfoDeviceCapability::accelerometer">
        <webidl>    readonly attribute boolean accelerometer;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Accelerometer sensor.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="accelerometerWakeup" id="::SystemInfo::SystemInfoDeviceCapability::accelerometerWakeup">
        <webidl>    readonly attribute boolean accelerometerWakeup;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Accelerometer sensor wake-up feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="barometer" id="::SystemInfo::SystemInfoDeviceCapability::barometer">
        <webidl>    readonly attribute boolean barometer;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Barometer sensor.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="barometerWakeup" id="::SystemInfo::SystemInfoDeviceCapability::barometerWakeup">
        <webidl>    readonly attribute boolean barometerWakeup;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Barometer sensor wake-up feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="gyroscope" id="::SystemInfo::SystemInfoDeviceCapability::gyroscope">
        <webidl>    readonly attribute boolean gyroscope;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Gyroscope sensor.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="gyroscopeWakeup" id="::SystemInfo::SystemInfoDeviceCapability::gyroscopeWakeup">
        <webidl>    readonly attribute boolean gyroscopeWakeup;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Gyroscope sensor wake-up feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="magnetometer" id="::SystemInfo::SystemInfoDeviceCapability::magnetometer">
        <webidl>    readonly attribute boolean magnetometer;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Magnetometer sensor.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="magnetometerWakeup" id="::SystemInfo::SystemInfoDeviceCapability::magnetometerWakeup">
        <webidl>    readonly attribute boolean magnetometerWakeup;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Magnetometer sensor wake-up feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="photometer" id="::SystemInfo::SystemInfoDeviceCapability::photometer">
        <webidl>    readonly attribute boolean photometer;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Photometer sensor.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="photometerWakeup" id="::SystemInfo::SystemInfoDeviceCapability::photometerWakeup">
        <webidl>    readonly attribute boolean photometerWakeup;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Photometer sensor wake-up feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="proximity" id="::SystemInfo::SystemInfoDeviceCapability::proximity">
        <webidl>    readonly attribute boolean proximity;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Proximity sensor.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="proximityWakeup" id="::SystemInfo::SystemInfoDeviceCapability::proximityWakeup">
        <webidl>    readonly attribute boolean proximityWakeup;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Proximity sensor wake-up feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="tiltmeter" id="::SystemInfo::SystemInfoDeviceCapability::tiltmeter">
        <webidl>    readonly attribute boolean tiltmeter;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Tiltmeter sensor.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="tiltmeterWakeup" id="::SystemInfo::SystemInfoDeviceCapability::tiltmeterWakeup">
        <webidl>    readonly attribute boolean tiltmeterWakeup;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports Tiltmeter sensor wake-up feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="dataEncryption" id="::SystemInfo::SystemInfoDeviceCapability::dataEncryption">
        <webidl>    readonly attribute boolean dataEncryption;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports data encryption.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="graphicsAcceleration" id="::SystemInfo::SystemInfoDeviceCapability::graphicsAcceleration">
        <webidl>    readonly attribute boolean graphicsAcceleration;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports hardware acceleration for 2D/3D graphics.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="push" id="::SystemInfo::SystemInfoDeviceCapability::push">
        <webidl>    readonly attribute boolean push;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports push service.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="telephony" id="::SystemInfo::SystemInfoDeviceCapability::telephony">
        <webidl>    readonly attribute boolean telephony;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports the telephony feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="telephonyMms" id="::SystemInfo::SystemInfoDeviceCapability::telephonyMms">
        <webidl>    readonly attribute boolean telephonyMms;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports the mms feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="telephonySms" id="::SystemInfo::SystemInfoDeviceCapability::telephonySms">
        <webidl>    readonly attribute boolean telephonySms;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports the sms feature.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="screenSizeNormal" id="::SystemInfo::SystemInfoDeviceCapability::screenSizeNormal">
        <webidl>    readonly attribute boolean screenSizeNormal;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports the screen normal size.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="screenSize480_800" id="::SystemInfo::SystemInfoDeviceCapability::screenSize480_800">
        <webidl>    readonly attribute boolean screenSize480_800;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports the 480 * 800 screen size.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="screenSize720_1280" id="::SystemInfo::SystemInfoDeviceCapability::screenSize720_1280">
        <webidl>    readonly attribute boolean screenSize720_1280;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports the 720 * 1280 screen size.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="autoRotation" id="::SystemInfo::SystemInfoDeviceCapability::autoRotation">
        <webidl>    readonly attribute boolean autoRotation;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports auto rotation.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="shellAppWidget" id="::SystemInfo::SystemInfoDeviceCapability::shellAppWidget">
        <webidl>    readonly attribute boolean shellAppWidget;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports shell app widget(dynamic box).
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="visionImageRecognition" id="::SystemInfo::SystemInfoDeviceCapability::visionImageRecognition">
        <webidl>    readonly attribute boolean visionImageRecognition;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports vision image recognition.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="visionQrcodeGeneration" id="::SystemInfo::SystemInfoDeviceCapability::visionQrcodeGeneration">
        <webidl>    readonly attribute boolean visionQrcodeGeneration;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports vision qrcode generation.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="visionQrcodeRecognition" id="::SystemInfo::SystemInfoDeviceCapability::visionQrcodeRecognition">
        <webidl>    readonly attribute boolean visionQrcodeRecognition;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports vision qrcode recognition.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="visionFaceRecognition" id="::SystemInfo::SystemInfoDeviceCapability::visionFaceRecognition">
        <webidl>    readonly attribute boolean visionFaceRecognition;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports vision face recognition.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="secureElement" id="::SystemInfo::SystemInfoDeviceCapability::secureElement">
        <webidl>    readonly attribute boolean secureElement;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports secure element.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="nativeOspCompatible" id="::SystemInfo::SystemInfoDeviceCapability::nativeOspCompatible">
        <webidl>    readonly attribute boolean nativeOspCompatible;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device supports native osp API.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="profile" id="::SystemInfo::SystemInfoDeviceCapability::profile">
        <webidl>    readonly attribute <ref>SystemInfoProfile</ref> profile;</webidl>
        <descriptive>
            <brief>
 Represents the profile of the current device.
            </brief>
            <version>
 2.2
            </version>
        </descriptive>
        <Type name="SystemInfoProfile"/>
      </Attribute>
    </Interface>
    <Dictionary name="SystemInfoOptions" id="::SystemInfo::SystemInfoOptions">
      <webidl>  dictionary SystemInfoOptions {
    unsigned long timeout;

    double highThreshold;

    double lowThreshold;
  };</webidl>
      <descriptive>
          <brief>
 An object containing the various options for fetching the properties requested.
          </brief>
         <description>
          <p>
The <var>highThreshold</var> and <var>lowThreshold</var> values are only applicable to the following <em>SystemInfoPropertyId</em>.
          </p>
          <ul>
            <li>
 SystemInfoBattery - level : <em>from 0 to 1</em>             </li>
            <li>
 SystemInfoCpu - load : <em>from 0 to 1</em>             </li>
            <li>
 SystemInfoDisplay - brightness : <em>from 0 to 1</em>             </li>
          </ul>
          <p>
For other cases, it is ignored.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <DictionaryMember name="timeout" id="::SystemInfo::SystemInfoOptions::timeout">
        <webidl>    unsigned long timeout;</webidl>
        <descriptive>
            <brief>
 The number of milliseconds beyond which the operation must be interrupted.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </DictionaryMember>
      <DictionaryMember name="highThreshold" id="::SystemInfo::SystemInfoOptions::highThreshold">
        <webidl>    double highThreshold;</webidl>
        <descriptive>
            <brief>
 An attribute to indicate that the <em>successCallback()</em> method in the watch
operation will be triggered only if the device property is a number and its value is greater than or equal to this number.
This attribute has no effect on the <em>get()</em> method.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
      </DictionaryMember>
      <DictionaryMember name="lowThreshold" id="::SystemInfo::SystemInfoOptions::lowThreshold">
        <webidl>    double lowThreshold;</webidl>
        <descriptive>
            <brief>
 An attribute to indicate that the <em>successCallback()</em> method in the watch operation must be triggered only if the property is a number and its value is lower than or equal to this number.
If both <em>highThreshold </em>and <em>lowThreshold </em>parameters are specified, the <em>successCallback()</em> is triggered if and only if the property value is either lower than the value of <em>lowThreshold</em> or higher than the value of <em>highThreshold</em>.
This attribute has no effect on the get method.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
      </DictionaryMember>
    </Dictionary>
    <Interface name="SystemInfoPropertySuccessCallback" id="::SystemInfo::SystemInfoPropertySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface SystemInfoPropertySuccessCallback {
    void onsuccess(<ref>SystemInfoProperty</ref> property);
  };</webidl>
      <descriptive>
          <brief>
 Systeminfo specific success callback.
          </brief>
         <description>
          <p>
This callback interface specifies a success callback with SystemInfoProperty as input argument.
It is used in asynchronous
operations, such as getPropertyValue() or addPropertyValueChangeListener()
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::SystemInfo::SystemInfoPropertySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>SystemInfoProperty</ref> property);</webidl>
        <descriptive>
            <brief>
 Method invoked when the asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="property">
            <descriptive>
                <description><p>
 The property returned from a successful asynchronous operation.
                </p></description>
            </descriptive>
            <Type name="SystemInfoProperty"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="SystemInfoPropertyArraySuccessCallback" id="::SystemInfo::SystemInfoPropertyArraySuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject] interface SystemInfoPropertyArraySuccessCallback {
    void onsuccess(<ref>SystemInfoProperty</ref>[] properties);
  };</webidl>
      <descriptive>
          <brief>
 Systeminfo specific success callback.
          </brief>
         <description>
          <p>
This callback interface specifies a success callback with SystemInfoProperty as input argument.
It is used in asynchronous operations, such as getPropertyValueArray() or addPropertyValueArrayChangeListener()
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::SystemInfo::SystemInfoPropertyArraySuccessCallback::onsuccess">
        <webidl>    void onsuccess(<ref>SystemInfoProperty</ref>[] properties);</webidl>
        <descriptive>
            <brief>
 Method invoked when the asynchronous call completes successfully.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="properties">
            <descriptive>
                <description><p>
 The array of SystemInfoProperty objects returned from a successful asynchronous operation.
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="SystemInfoProperty"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="SystemInfoProperty" id="::SystemInfo::SystemInfoProperty">
      <webidl>  [NoInterfaceObject] interface SystemInfoProperty {
  };</webidl>
      <descriptive>
          <brief>
 This is a common abstract interface used by different types of system information objects.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
    </Interface>
    <Interface name="SystemInfoBattery" id="::SystemInfo::SystemInfoBattery">
      <webidl>  [NoInterfaceObject] interface SystemInfoBattery : <ref>SystemInfoProperty</ref> {
    readonly attribute double level;

    readonly attribute boolean isCharging;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the general state of the system's battery
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="level" id="::SystemInfo::SystemInfoBattery::level">
        <webidl>    readonly attribute double level;</webidl>
        <descriptive>
            <brief>
 An attribute to specify the remaining level of an internal battery, scaled from <var>0 </var>to <var>1</var>:
            </brief>
           <description>
            <ul>
              <li>
<var>0 </var>indicates that the battery level is the lowest and the system is about to enter shutdown mode.              </li>
              <li>
<var>1 </var>indicates that the system's charge is maximum.              </li>
            </ul>
            <p>
Any threshold parameter used in a watch operation to monitor this property applies to this attribute.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
      </Attribute>
      <Attribute readonly="readonly" name="isCharging" id="::SystemInfo::SystemInfoBattery::isCharging">
        <webidl>    readonly attribute boolean isCharging;</webidl>
        <descriptive>
            <brief>
 Indicates whether the battery source is currently charging.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoCpu" id="::SystemInfo::SystemInfoCpu">
      <webidl>  [NoInterfaceObject] interface SystemInfoCpu : <ref>SystemInfoProperty</ref> {
    readonly attribute double load;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the state of the CPUs available to this system.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="load" id="::SystemInfo::SystemInfoCpu::load">
        <webidl>    readonly attribute double load;</webidl>
        <descriptive>
            <brief>
  An attribute to indicate the current CPU load, as a number between <var>0.0 </var>and <var>1.0</var>, representing the minimum and maximum values allowed on this system.
Any threshold parameter used in a watch function to monitor this property applies to this attribute.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoStorage" id="::SystemInfo::SystemInfoStorage">
      <webidl>  [NoInterfaceObject] interface SystemInfoStorage : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoStorageUnit</ref>[] units;
  };</webidl>
      <descriptive>
          <brief>
 This property exposes the data storage devices connected to this system.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="units" id="::SystemInfo::SystemInfoStorage::units">
        <webidl>    readonly attribute <ref>SystemInfoStorageUnit</ref>[] units;</webidl>
        <descriptive>
            <brief>
 The array of storage units connected to this device.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="array">
          <Type name="SystemInfoStorageUnit"/>
        </Type>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoStorageUnit" id="::SystemInfo::SystemInfoStorageUnit">
      <webidl>  [NoInterfaceObject] interface SystemInfoStorageUnit : <ref>SystemInfoProperty</ref> {
    readonly attribute DOMString type;

    readonly attribute unsigned long long capacity;

    readonly attribute unsigned long long availableCapacity;

    readonly attribute boolean isRemovable;

    readonly attribute boolean isRemoveable;
  };</webidl>
      <descriptive>
          <brief>
 This property exposes a single storage device connected to this system.
          </brief>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="type" id="::SystemInfo::SystemInfoStorageUnit::type">
        <webidl>    readonly attribute DOMString type;</webidl>
        <descriptive>
            <brief>
 The type of a storage device. The value is one of the constants defined for this type.
            </brief>
           <description>
            <p>
The supported storage unit types are:
            </p>
            <ul>
              <li>
UNKNOWN              </li>
              <li>
INTERNAL               </li>
              <li>
USB_DEVICE              </li>
              <li>
USB_HOST              </li>
              <li>
MMC              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="capacity" id="::SystemInfo::SystemInfoStorageUnit::capacity">
        <webidl>    readonly attribute unsigned long long capacity;</webidl>
        <descriptive>
            <brief>
 The amount of data that this device can hold, in bytes.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned long long"/>
      </Attribute>
      <Attribute readonly="readonly" name="availableCapacity" id="::SystemInfo::SystemInfoStorageUnit::availableCapacity">
        <webidl>    readonly attribute unsigned long long availableCapacity;</webidl>
        <descriptive>
            <brief>
 The amount of available data that this device can hold, in bytes.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned long long"/>
      </Attribute>
      <Attribute readonly="readonly" name="isRemovable" id="::SystemInfo::SystemInfoStorageUnit::isRemovable">
        <webidl>    readonly attribute boolean isRemovable;</webidl>
        <descriptive>
            <brief>
 An attribute to indicate whether a device can be removed or not.
            </brief>
           <description>
            <p>
The following values are supported:
            </p>
            <ul>
              <li>
<var>true </var> - If this storage unit can be removed from the system (such as an sdcard unplugged)              </li>
              <li>
<var>false</var> - If this storage unit cannot be removed from the system              </li>
            </ul>
           </description>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="isRemoveable" id="::SystemInfo::SystemInfoStorageUnit::isRemoveable">
        <webidl>    readonly attribute boolean isRemoveable;</webidl>
        <descriptive>
            <brief>
 true if this unit can be removed from the system (such as an sdcard unplugged), false otherwise.
            </brief>
            <version>
 1.0
            </version>
            <deprecated>
 A typographic error.
            </deprecated>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoDisplay" id="::SystemInfo::SystemInfoDisplay">
      <webidl>  [NoInterfaceObject] interface SystemInfoDisplay : <ref>SystemInfoProperty</ref> {
    readonly attribute unsigned long resolutionWidth;

    readonly attribute unsigned long resolutionHeight;

    readonly attribute unsigned long dotsPerInchWidth;

    readonly attribute unsigned long dotsPerInchHeight;

    readonly attribute double physicalWidth;

    readonly attribute double physicalHeight;

    readonly attribute double brightness;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the information of the Display.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="resolutionWidth" id="::SystemInfo::SystemInfoDisplay::resolutionWidth">
        <webidl>    readonly attribute unsigned long resolutionWidth;</webidl>
        <descriptive>
            <brief>
 The total number of addressable pixels in the horizontal direction of a rectangular entity
(such as Camera, Display, Image, Video, ...) when held in its default orientation.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute readonly="readonly" name="resolutionHeight" id="::SystemInfo::SystemInfoDisplay::resolutionHeight">
        <webidl>    readonly attribute unsigned long resolutionHeight;</webidl>
        <descriptive>
            <brief>
 The total number of addressable pixels in the vertical direction of a rectangular element
(such as Camera, Display, Image, Video, ...) when held in its default orientation.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute readonly="readonly" name="dotsPerInchWidth" id="::SystemInfo::SystemInfoDisplay::dotsPerInchWidth">
        <webidl>    readonly attribute unsigned long dotsPerInchWidth;</webidl>
        <descriptive>
            <brief>
 Resolution of this device, along its width, in dots per inch.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute readonly="readonly" name="dotsPerInchHeight" id="::SystemInfo::SystemInfoDisplay::dotsPerInchHeight">
        <webidl>    readonly attribute unsigned long dotsPerInchHeight;</webidl>
        <descriptive>
            <brief>
 Resolution of this device, along its height, in dots per inch.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned long"/>
      </Attribute>
      <Attribute readonly="readonly" name="physicalWidth" id="::SystemInfo::SystemInfoDisplay::physicalWidth">
        <webidl>    readonly attribute double physicalWidth;</webidl>
        <descriptive>
            <brief>
 The display's physical width in millimeters.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
      </Attribute>
      <Attribute readonly="readonly" name="physicalHeight" id="::SystemInfo::SystemInfoDisplay::physicalHeight">
        <webidl>    readonly attribute double physicalHeight;</webidl>
        <descriptive>
            <brief>
 The display's physical height in millimeters.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
      </Attribute>
      <Attribute readonly="readonly" name="brightness" id="::SystemInfo::SystemInfoDisplay::brightness">
        <webidl>    readonly attribute double brightness;</webidl>
        <descriptive>
            <brief>
 The current brightness of a display ranging between <var>0 </var>to <var>1</var>.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoDeviceOrientation" id="::SystemInfo::SystemInfoDeviceOrientation">
      <webidl>  [NoInterfaceObject] interface SystemInfoDeviceOrientation : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoDeviceOrientationStatus</ref> status;

    readonly attribute boolean isAutoRotation;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the information of the device orientation in this system.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="status" id="::SystemInfo::SystemInfoDeviceOrientation::status">
        <webidl>    readonly attribute <ref>SystemInfoDeviceOrientationStatus</ref> status;</webidl>
        <descriptive>
            <brief>
 Represents the status of the current device orientation.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="SystemInfoDeviceOrientationStatus"/>
      </Attribute>
      <Attribute readonly="readonly" name="isAutoRotation" id="::SystemInfo::SystemInfoDeviceOrientation::isAutoRotation">
        <webidl>    readonly attribute boolean isAutoRotation;</webidl>
        <descriptive>
            <brief>
 whether the device is in autorotation.
            </brief>
            <version>
 2.2
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoBuild" id="::SystemInfo::SystemInfoBuild">
      <webidl>  [NoInterfaceObject] interface SystemInfoBuild : <ref>SystemInfoProperty</ref> {
    readonly attribute DOMString model;

    readonly attribute DOMString manufacturer;

    readonly attribute DOMString buildVersion;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the information of the current device.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="model" id="::SystemInfo::SystemInfoBuild::model">
        <webidl>    readonly attribute DOMString model;</webidl>
        <descriptive>
            <brief>
 Represents the model name of the current device.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="manufacturer" id="::SystemInfo::SystemInfoBuild::manufacturer">
        <webidl>    readonly attribute DOMString manufacturer;</webidl>
        <descriptive>
            <brief>
 Represents the manufacturer of the device.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="buildVersion" id="::SystemInfo::SystemInfoBuild::buildVersion">
        <webidl>    readonly attribute DOMString buildVersion;</webidl>
        <descriptive>
            <brief>
 Represents the build version information of the device.
            </brief>
            <version>
 2.2
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoLocale" id="::SystemInfo::SystemInfoLocale">
      <webidl>  [NoInterfaceObject] interface SystemInfoLocale : <ref>SystemInfoProperty</ref> {
    readonly attribute DOMString language;

    readonly attribute DOMString country;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the locale information of the current device.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="language" id="::SystemInfo::SystemInfoLocale::language">
        <webidl>    readonly attribute DOMString language;</webidl>
        <descriptive>
            <brief>
 Indicates the current language setting in the (LANGUAGE)_(REGION) syntax.
The language setting is in the ISO 630-2 format and the region setting is in the ISO 3166-1 format.
The language setting is case-sensitive.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="country" id="::SystemInfo::SystemInfoLocale::country">
        <webidl>    readonly attribute DOMString country;</webidl>
        <descriptive>
            <brief>
 Indicates the current country setting in the (LANGUAGE)_(REGION) syntax.
The language setting is in the ISO 630-2 format and the region setting is in the ISO 3166-1 format.
The country setting is case-sensitive.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoNetwork" id="::SystemInfo::SystemInfoNetwork">
      <webidl>  [NoInterfaceObject] interface SystemInfoNetwork : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoNetworkType</ref> networkType;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the information of the data network in this system.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="networkType" id="::SystemInfo::SystemInfoNetwork::networkType">
        <webidl>    readonly attribute <ref>SystemInfoNetworkType</ref> networkType;</webidl>
        <descriptive>
            <brief>
 Represents the network type of the current data network.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type name="SystemInfoNetworkType"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoWifiNetwork" id="::SystemInfo::SystemInfoWifiNetwork">
      <webidl>   [NoInterfaceObject] interface SystemInfoWifiNetwork : <ref>SystemInfoProperty</ref> {
    readonly attribute DOMString status;

    readonly attribute DOMString ssid;

    readonly attribute DOMString ipAddress;

    readonly attribute DOMString ipv6Address;

    readonly attribute DOMString macAddress;

    readonly attribute double signalStrength;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the information of the Wi-Fi network in this system.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="status" id="::SystemInfo::SystemInfoWifiNetwork::status">
        <webidl>    readonly attribute DOMString status;</webidl>
        <descriptive>
            <brief>
 Represents the status (ON or OFF) of the Wi-Fi interface.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="ssid" id="::SystemInfo::SystemInfoWifiNetwork::ssid">
        <webidl>    readonly attribute DOMString ssid;</webidl>
        <descriptive>
            <brief>
 Represents the SSID of the Wi-Fi network.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="ipAddress" id="::SystemInfo::SystemInfoWifiNetwork::ipAddress">
        <webidl>    readonly attribute DOMString ipAddress;</webidl>
        <descriptive>
            <brief>
 Represents the IPv4 address of the Wi-Fi network.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="ipv6Address" id="::SystemInfo::SystemInfoWifiNetwork::ipv6Address">
        <webidl>    readonly attribute DOMString ipv6Address;</webidl>
        <descriptive>
            <brief>
 Represents the IPv6 address of the Wi-Fi network.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="macAddress" id="::SystemInfo::SystemInfoWifiNetwork::macAddress">
        <webidl>    readonly attribute DOMString macAddress;</webidl>
        <descriptive>
            <brief>
 Represents the MAC address of the Wi-Fi interface.
            </brief>
           <description>
            <p>
It is written in MM:MM:MM:SS:SS:SS format.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="signalStrength" id="::SystemInfo::SystemInfoWifiNetwork::signalStrength">
        <webidl>    readonly attribute double signalStrength;</webidl>
        <descriptive>
            <brief>
 This connection's signal strength, as a normalized value between 0 (no signal detected) and 1 (the level is at its maximum value).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoCellularNetwork" id="::SystemInfo::SystemInfoCellularNetwork">
      <webidl>  [NoInterfaceObject] interface SystemInfoCellularNetwork : <ref>SystemInfoProperty</ref> {

    readonly attribute DOMString status;

    readonly attribute DOMString apn;

    readonly attribute DOMString ipAddress;

    readonly attribute DOMString ipv6Address;

    readonly attribute unsigned short mcc;

    readonly attribute unsigned short mnc;

    readonly attribute unsigned short cellId;

    readonly attribute unsigned short lac;

    readonly attribute boolean isRoaming;

    readonly attribute boolean isFlightMode;

    readonly attribute DOMString imei raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the information of the Cellular network in this system.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="status" id="::SystemInfo::SystemInfoCellularNetwork::status">
        <webidl>    readonly attribute DOMString status;</webidl>
        <descriptive>
            <brief>
 Represents the status (ON or OFF) of the cellular network.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="apn" id="::SystemInfo::SystemInfoCellularNetwork::apn">
        <webidl>    readonly attribute DOMString apn;</webidl>
        <descriptive>
            <brief>
 Represents an Access Point Name of the cellular network.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="ipAddress" id="::SystemInfo::SystemInfoCellularNetwork::ipAddress">
        <webidl>    readonly attribute DOMString ipAddress;</webidl>
        <descriptive>
            <brief>
 Represents the IPv4 address of the cellular network.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="ipv6Address" id="::SystemInfo::SystemInfoCellularNetwork::ipv6Address">
        <webidl>    readonly attribute DOMString ipv6Address;</webidl>
        <descriptive>
            <brief>
 Represents the IPv6 address of the cellular network.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="mcc" id="::SystemInfo::SystemInfoCellularNetwork::mcc">
        <webidl>    readonly attribute unsigned short mcc;</webidl>
        <descriptive>
            <brief>
 Represents Mobile Country Code (MCC) of the cellular network.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Attribute>
      <Attribute readonly="readonly" name="mnc" id="::SystemInfo::SystemInfoCellularNetwork::mnc">
        <webidl>    readonly attribute unsigned short mnc;</webidl>
        <descriptive>
            <brief>
 Represents Mobile Network Code (MNC) of the cellular network. MNC is used in combination with MCC (also known as a &quot;MCC / MNC tuple&quot;) to uniquely
identify a mobile phone operator/carrier using the GSM, CDMA, iDEN, TETRA and UMTS public land mobile networks and some satellite mobile networks.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Attribute>
      <Attribute readonly="readonly" name="cellId" id="::SystemInfo::SystemInfoCellularNetwork::cellId">
        <webidl>    readonly attribute unsigned short cellId;</webidl>
        <descriptive>
            <brief>
 Represents Cell Id.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Attribute>
      <Attribute readonly="readonly" name="lac" id="::SystemInfo::SystemInfoCellularNetwork::lac">
        <webidl>    readonly attribute unsigned short lac;</webidl>
        <descriptive>
            <brief>
 Represents Location Area Code.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Attribute>
      <Attribute readonly="readonly" name="isRoaming" id="::SystemInfo::SystemInfoCellularNetwork::isRoaming">
        <webidl>    readonly attribute boolean isRoaming;</webidl>
        <descriptive>
            <brief>
 Whether the connection is set up while the device is roaming.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="isFlightMode" id="::SystemInfo::SystemInfoCellularNetwork::isFlightMode">
        <webidl>    readonly attribute boolean isFlightMode;</webidl>
        <descriptive>
            <brief>
 Indicates whether the device is in flight mode.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
      <Attribute readonly="readonly" name="imei" id="::SystemInfo::SystemInfoCellularNetwork::imei">
        <webidl>    readonly attribute DOMString imei raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the International Mobile Equipment Identity (IMEI).
            </brief>
            <version>
 2.1
            </version>
            <privilegelevel>
 partner
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/systemmanager
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoSIM" id="::SystemInfo::SystemInfoSIM">
      <webidl>  [NoInterfaceObject] interface SystemInfoSIM : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoSimState</ref> state raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString operatorName raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString msisdn raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString iccid raises(<ref>WebAPIException</ref>);

    readonly attribute unsigned short mcc raises(<ref>WebAPIException</ref>);

    readonly attribute unsigned short mnc raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString msin raises(<ref>WebAPIException</ref>);

    readonly attribute DOMString spn raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the information of the SIM card information.
          </brief>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="state" id="::SystemInfo::SystemInfoSIM::state">
        <webidl>    readonly attribute <ref>SystemInfoSimState</ref> state raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the SIM card state.
            </brief>
            <version>
 2.1
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type name="SystemInfoSimState"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="operatorName" id="::SystemInfo::SystemInfoSIM::operatorName">
        <webidl>    readonly attribute DOMString operatorName raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the Operator Name String (ONS) of Common PCN Handset Specification (CPHS) in SIM card.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="msisdn" id="::SystemInfo::SystemInfoSIM::msisdn">
        <webidl>    readonly attribute DOMString msisdn raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the SIM card subscriber number.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 partner
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/systemmanager
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="iccid" id="::SystemInfo::SystemInfoSIM::iccid">
        <webidl>    readonly attribute DOMString iccid raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the Integrated Circuit Card ID.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="mcc" id="::SystemInfo::SystemInfoSIM::mcc">
        <webidl>    readonly attribute unsigned short mcc raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the Mobile Country Code (MCC) of SIM provider.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type type="unsigned short"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="mnc" id="::SystemInfo::SystemInfoSIM::mnc">
        <webidl>    readonly attribute unsigned short mnc raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the Mobile Network Code (MNC) of SIM provider.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type type="unsigned short"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="msin" id="::SystemInfo::SystemInfoSIM::msin">
        <webidl>    readonly attribute DOMString msin raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the Mobile Subscription Identification Number (MSIN) of SIM provider.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 partner
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/systemmanager
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
      <Attribute readonly="readonly" name="spn" id="::SystemInfo::SystemInfoSIM::spn">
        <webidl>    readonly attribute DOMString spn raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Represents the Service Provider Name (SPN) of SIM card.
            </brief>
            <version>
 2.0
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/system
            </privilege>
        </descriptive>
        <Type type="DOMString"/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if this attribute is not allowed.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoPeripheral" id="::SystemInfo::SystemInfoPeripheral">
      <webidl>  [NoInterfaceObject] interface SystemInfoPeripheral : <ref>SystemInfoProperty</ref> {
    readonly attribute boolean isVideoOutputOn;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the peripheral information of the current device.
          </brief>
          <version>
 2.1
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="isVideoOutputOn" id="::SystemInfo::SystemInfoPeripheral::isVideoOutputOn">
        <webidl>    readonly attribute boolean isVideoOutputOn;</webidl>
        <descriptive>
            <brief>
 Represents the video out status.
            </brief>
            <version>
 2.1
            </version>
        </descriptive>
        <Type type="boolean"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoMemory" id="::SystemInfo::SystemInfoMemory">
      <webidl>  [NoInterfaceObject] interface SystemInfoMemory : <ref>SystemInfoProperty</ref> {
    readonly attribute <ref>SystemInfoLowMemoryStatus</ref> status;

  };</webidl>
      <descriptive>
          <brief>
 This property represents information about the memory state on the device system.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="status" id="::SystemInfo::SystemInfoMemory::status">
        <webidl>    readonly attribute <ref>SystemInfoLowMemoryStatus</ref> status;</webidl>
        <descriptive>
            <brief>
 Represents the low memory state.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="SystemInfoLowMemoryStatus"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoVideoSourceInfo" id="::SystemInfo::SystemInfoVideoSourceInfo">
      <webidl>  [NoInterfaceObject] interface SystemInfoVideoSourceInfo {

    readonly attribute <ref>SystemInfoVideoSourceType</ref> type;

     readonly attribute long number;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects each input source the current device has.
          </brief>
         <description>
          <p>
If there are 2 HDMI inputs on a device, Two <em>SystemInfoVideoSourceInfo</em> objects must be retreived through <em>SystemInfoVideoSource</em><br/>{type=HDMI, number=1}, {type=HDMI, number=2}
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="type" id="::SystemInfo::SystemInfoVideoSourceInfo::type">
        <webidl>    readonly attribute <ref>SystemInfoVideoSourceType</ref> type;</webidl>
        <descriptive>
            <brief>
 Represents the type of the video input source.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="SystemInfoVideoSourceType"/>
      </Attribute>
      <Attribute readonly="readonly" name="number" id="::SystemInfo::SystemInfoVideoSourceInfo::number">
        <webidl>     readonly attribute long number;</webidl>
        <descriptive>
            <brief>
 Represents the input number of the input source.
            </brief>
           <description>
            <p>
If the source is &quot;HDMI 2&quot;, the <em>number</em> is 2.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
    </Interface>
    <Interface name="SystemInfoVideoSource" id="::SystemInfo::SystemInfoVideoSource">
      <webidl>  [NoInterfaceObject] interface SystemInfoVideoSource : <ref>SystemInfoProperty</ref> {

    readonly attribute <ref>SystemInfoVideoSourceInfo</ref>[] connected;

    readonly attribute <ref>SystemInfoVideoSourceInfo</ref>[] disconnected;
  };</webidl>
      <descriptive>
          <brief>
 This property reflects the video sources the device has.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="SystemInfoProperty"/>
      </InterfaceInheritance>
      <Attribute readonly="readonly" name="connected" id="::SystemInfo::SystemInfoVideoSource::connected">
        <webidl>    readonly attribute <ref>SystemInfoVideoSourceInfo</ref>[] connected;</webidl>
        <descriptive>
            <brief>
 Represents a list of video sources that a device is connected with.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="array">
          <Type name="SystemInfoVideoSourceInfo"/>
        </Type>
      </Attribute>
      <Attribute readonly="readonly" name="disconnected" id="::SystemInfo::SystemInfoVideoSource::disconnected">
        <webidl>    readonly attribute <ref>SystemInfoVideoSourceInfo</ref>[] disconnected;</webidl>
        <descriptive>
            <brief>
 Represents a list of video sources that a device is not connected with.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="array">
          <Type name="SystemInfoVideoSourceInfo"/>
        </Type>
      </Attribute>
    </Interface>
  </Module>
  <Module name="Time" id="::Time">
    <webidl>module Time {

  enum TimeDurationUnit { &quot;MSECS&quot;, &quot;SECS&quot;, &quot;MINS&quot;, &quot;HOURS&quot;, &quot;DAYS&quot; };

  [NoInterfaceObject] interface TimeManagerObject {
    readonly attribute <ref>TimeUtil</ref> time;
  };
  <ref>Tizen</ref> implements <ref>TimeManagerObject</ref>;

  [NoInterfaceObject] interface TimeUtil {
    <ref>TZDate</ref> getCurrentDateTime() raises(<ref>WebAPIException</ref>);

    DOMString getLocalTimezone() raises(<ref>WebAPIException</ref>);

    DOMString[] getAvailableTimezones() raises(<ref>WebAPIException</ref>);

    DOMString getDateFormat(optional boolean? shortformat) raises(<ref>WebAPIException</ref>);

    DOMString getTimeFormat() raises(<ref>WebAPIException</ref>);

    boolean isLeapYear(long year) raises(<ref>WebAPIException</ref>);

    void setDateTimeChangeListener(<ref>SuccessCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);

    void unsetDateTimeChangeListener() raises(<ref>WebAPIException</ref>);

    void setTimezoneChangeListener(<ref>SuccessCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);

    void unsetTimezoneChangeListener() raises(<ref>WebAPIException</ref>);

  };

  [Constructor(optional Date? datetime, optional DOMString? timezone),
   Constructor(long year, long month, long day, optional long? hours, optional long? minutes, optional long? seconds, optional long? milliseconds, optional DOMString? timezone)]

  interface TZDate {
    long getDate();

    void setDate(long date);

    long getDay();

    long getFullYear();

    void setFullYear(long year);

    long getHours();

    void setHours(long hours);

    long getMilliseconds();

    void setMilliseconds(long ms);

    long getMinutes();

    void setMinutes(long minutes);

    long getMonth();

    void setMonth(long month);

    long getSeconds();

    void setSeconds(long seconds);

    long getUTCDate();

    void setUTCDate(long date);

    long getUTCDay();

    long getUTCFullYear();

    void setUTCFullYear(long year);

    long getUTCHours();

    void setUTCHours(long hours);

    long getUTCMilliseconds();

    void setUTCMilliseconds(long ms);

    long getUTCMinutes();

    void setUTCMinutes(long minutes);

    long getUTCMonth();

    void setUTCMonth(long month);

    long getUTCSeconds();

    void setUTCSeconds(long seconds);

    DOMString getTimezone();

    <ref>TZDate</ref> toTimezone(DOMString tzid) raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref> toLocalTimezone() raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref> toUTC() raises(<ref>WebAPIException</ref>);

    <ref>TimeDuration</ref> difference(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);

    boolean equalsTo(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);

    boolean earlierThan(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);

    boolean laterThan(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref> addDuration(<ref>TimeDuration</ref> duration) raises(<ref>WebAPIException</ref>);

    DOMString toLocaleDateString();

    DOMString toLocaleTimeString();

    DOMString toLocaleString();

    DOMString toDateString();

    DOMString toTimeString();

    DOMString toString();

    DOMString getTimezoneAbbreviation() raises(<ref>WebAPIException</ref>);

    long secondsFromUTC() raises(<ref>WebAPIException</ref>);

    boolean isDST() raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref>? getPreviousDSTTransition() raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref>? getNextDSTTransition() raises(<ref>WebAPIException</ref>);
  };

  [Constructor(long long length, optional <ref>TimeDurationUnit</ref>? unit)]
  interface TimeDuration
  {
    attribute long long length;

    attribute <ref>TimeDurationUnit</ref> unit;

    <ref>TimeDuration</ref> difference(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);

    boolean equalsTo(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);

    boolean lessThan(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);

    boolean greaterThan(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);
  };
};</webidl>
    <descriptive>
        <brief>
  The Time API provides information regarding date/time and time zones.
        </brief>
        <version>
 1.0
        </version>
       <description>
        <p>
The JavaScript Date object does not have full timezone support.
Date objects allow only simple representations to denote a particular location's
offset from Universal Coordinated Time (UTC). This is typically provided as a +/-
offset from UTC-0 (also known as Greenwich Mean Time, or GMT) for example, +05:30 denotes
that a location is 5 hours and 30 minutes ahead of UTC +00:00.
The issue with this method is not getting the correct
local time for a given date. The existing methods are sufficient for this purpose.
The issue is correctly converting to and from local time and UTC for all points in
time - in any of the past, present, and future - based on an initial time provided.
This is important for defining relative dates, where a time in a given location may
observe different UTC offsets, according to any Daylight Savings Rules (DST) in effect
or any other changes that may occur to a location's time zone over time.
Without the communication of the explicit time zone rules governing a given date and
time, the ability to effectively calculate the offset of the local time to UTC or to
any other time zone at any point in the past or future is lost.
        </p>
        <p>
This API can be used to get TZDate objects with full time zone support, convert them
between timezones, retrieve available timezones.
        </p>
        <p>
For more information on the Time features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/sys_guide/time.htm">Time Guide</a>.
        </p>
       </description>
    </descriptive>
    <Enum name="TimeDurationUnit" id="::Time::TimeDurationUnit">
      <webidl>  enum TimeDurationUnit { &quot;MSECS&quot;, &quot;SECS&quot;, &quot;MINS&quot;, &quot;HOURS&quot;, &quot;DAYS&quot; };</webidl>
      <descriptive>
          <brief>
 Specifies the TimeDuration unit (milliseconds, seconds, minutes, hours or days).
          </brief>
         <description>
          <p>
At least the following values must be supported:
          </p>
          <ul>
            <li>
MSECS - Indicates a duration in milliseconds            </li>
            <li>
SECS - Indicates a duration in seconds             </li>
            <li>
MINS - Indicates a duration in minutes             </li>
            <li>
HOURS - Indicates a duration in hours             </li>
            <li>
DAYS - Indicates a duration in days            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <EnumValue stringvalue="MSECS">
        <webidl> &quot;MSECS</webidl>
      </EnumValue>
      <EnumValue stringvalue="SECS">
        <webidl> &quot;SECS</webidl>
      </EnumValue>
      <EnumValue stringvalue="MINS">
        <webidl> &quot;MINS</webidl>
      </EnumValue>
      <EnumValue stringvalue="HOURS">
        <webidl> &quot;HOURS</webidl>
      </EnumValue>
      <EnumValue stringvalue="DAYS">
        <webidl> &quot;DAYS</webidl>
      </EnumValue>
    </Enum>
    <Interface name="TimeManagerObject" id="::Time::TimeManagerObject">
      <webidl>  [NoInterfaceObject] interface TimeManagerObject {
    readonly attribute <ref>TimeUtil</ref> time;
  };</webidl>
      <descriptive>
          <brief>
 The TimeManagerObject interface defines what is instantiated in the tizen object by the Tizen Platform.
          </brief>
         <description>
          <p>
There will be a <em>tizen.time</em> object that allows accessing the
functionality of the Time API.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="time" id="::Time::TimeManagerObject::time">
        <webidl>    readonly attribute <ref>TimeUtil</ref> time;</webidl>
        <Type name="TimeUtil"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="TimeManagerObject">
      <webidl>  <ref>Tizen</ref> implements <ref>TimeManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="TimeUtil" id="::Time::TimeUtil">
      <webidl>  [NoInterfaceObject] interface TimeUtil {
    <ref>TZDate</ref> getCurrentDateTime() raises(<ref>WebAPIException</ref>);

    DOMString getLocalTimezone() raises(<ref>WebAPIException</ref>);

    DOMString[] getAvailableTimezones() raises(<ref>WebAPIException</ref>);

    DOMString getDateFormat(optional boolean? shortformat) raises(<ref>WebAPIException</ref>);

    DOMString getTimeFormat() raises(<ref>WebAPIException</ref>);

    boolean isLeapYear(long year) raises(<ref>WebAPIException</ref>);

    void setDateTimeChangeListener(<ref>SuccessCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);

    void unsetDateTimeChangeListener() raises(<ref>WebAPIException</ref>);

    void setTimezoneChangeListener(<ref>SuccessCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);

    void unsetTimezoneChangeListener() raises(<ref>WebAPIException</ref>);

  };</webidl>
      <descriptive>
          <brief>
 The TimeUtil interface that provides access to the time API.
          </brief>
         <description>
          <p>
This interface offers methods to manage date/time as well as timezones such as:
          </p>
          <ul>
            <li>
Get the current date/time using getCurrentDateTime().            </li>
            <li>
Get timezones using getLocalTimezone() and getAvailableTimezones().            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="getCurrentDateTime" id="::Time::TimeUtil::getCurrentDateTime">
        <webidl>    <ref>TZDate</ref> getCurrentDateTime() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the current date/time.
            </brief>
            <version>
 1.0
            </version>
            <Code> var current_dt = tizen.time.getCurrentDateTime();
 console.log(&quot;current date/time is &quot; + current_dt.toLocaleString());
 </Code>
        </descriptive>
        <Type name="TZDate">
          <descriptive>
              <description><p>
 TZDate The current TZDate object
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getLocalTimezone" id="::Time::TimeUtil::getLocalTimezone">
        <webidl>    DOMString getLocalTimezone() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the identifier of the local system timezone.
            </brief>
            <version>
 1.0
            </version>
            <Code> console.log(&quot;The local time zone is &quot; + tizen.time.getLocalTimezone());
 </Code>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 Timezone The local timezone
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getAvailableTimezones" id="::Time::TimeUtil::getAvailableTimezones">
        <webidl>    DOMString[] getAvailableTimezones() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets synchronously the identifiers of the timezones supported by the device.
            </brief>
           <description>
            <p>
Zero or more slashes separate different components of a timezone identifier,
with the most general descriptor first and the most specific one last. For example,
'Europe/Berlin', 'America/Argentina/Buenos_Aires'.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> var tzids = tizen.time.getAvailableTimezones();
 console.log(&quot;The device supports &quot; + tzids.length + &quot; time zones.&quot;);
 </Code>
        </descriptive>
        <Type type="array">
          <descriptive>
              <description><p>
 The array of time zone identifiers
              </p></description>
          </descriptive>
          <Type type="DOMString"/>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getDateFormat" id="::Time::TimeUtil::getDateFormat">
        <webidl>    DOMString getDateFormat(optional boolean? shortformat) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
           <description>
            <p>
Gets the date format according to the system's locale settings.
            </p>
            <p>
These expressions may be used in the returned string:
            </p>
            <ul>
              <li>
&quot;d&quot; = day number (1 to 31)              </li>
              <li>
&quot;D&quot; = day name              </li>
              <li>
&quot;m&quot; = month number (1 to 12)              </li>
              <li>
&quot;M&quot; = month name              </li>
              <li>
&quot;y&quot; = year              </li>
            </ul>
            <p>
Examples of string formats include: &quot;d/m/y&quot;, &quot;y-d-m&quot;, &quot;D, M d y&quot;.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The date format according to the system's locale settings
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="shortformat">
            <descriptive>
                <description><p>
 The flag indicating whether the user is interested in the short
date format (23/10/2011) instead of a long date format (&quot;Monday, October 23 2011&quot;) <br/>By default, this attribute is set to false.
                </p></description>
            </descriptive>
            <Type type="boolean" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getTimeFormat" id="::Time::TimeUtil::getTimeFormat">
        <webidl>    DOMString getTimeFormat() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
           <description>
            <p>
Gets the time format according to the system's locale settings.
            </p>
            <p>
These expressions may be used in the returned string:
            </p>
            <ul>
              <li>
&quot;h&quot; = hours (0 to 23 or 1 to 12 if AM/PM display)              </li>
              <li>
&quot;m&quot; = minutes (0 to 59)              </li>
              <li>
&quot;s&quot; = seconds (0 to 59)              </li>
              <li>
&quot;ap&quot; = AM/PM display              </li>
            </ul>
            <p>
Examples of string formats include: &quot;h:m:s ap&quot;, &quot;h:m:s&quot;.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The time format according to the system's locale settings
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="isLeapYear" id="::Time::TimeUtil::isLeapYear">
        <webidl>    boolean isLeapYear(long year) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether the given year is a leap year.
            </brief>
            <version>
 1.0
            </version>
            <Code> var current_dt = tizen.time.getCurrentDateTime();
 var is_leap = tizen.time.isLeapYear(current_dt.getFullYear());
 if (is_leap) {
   console.log(&quot;This year is a leap year.&quot;);
 }
 </Code>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean <em>true</em>, if the year is a leap year
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="year">
            <descriptive>
                <description><p>
 The year to check
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input
parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setDateTimeChangeListener" id="::Time::TimeUtil::setDateTimeChangeListener">
        <webidl>    void setDateTimeChangeListener(<ref>SuccessCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sets a listener to receive notification of changes to the time/date on a device.
            </brief>
           <description>
            <p>
Listener set with <em>setTimezoneChangeListener()</em> method is called when device time was set by the user. <br/>            </p>
           </description>
            <version>
 2.3
            </version>
            <Code> var changedCallback = function() {
     try {
         var current_dt = tizen.time.getCurrentDateTime();
         console.log(&quot;current date/time is &quot; + current_dt.toLocaleString());

     } catch (err) {
         console.log (err.name + &quot;: &quot; + err.message);
     }
 };

 tizen.time.setDateTimeChangeListener(changedCallback);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="changeCallback">
            <descriptive>
                <description><p>
 Callback method to be invoked when device time was set <br/>It is not invoked when time passes naturally.
                </p></description>
            </descriptive>
            <Type name="SuccessCallback"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="unsetDateTimeChangeListener" id="::Time::TimeUtil::unsetDateTimeChangeListener">
        <webidl>    void unsetDateTimeChangeListener() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Unsets the listener to stop receiving notification of changes to the time/date on a device.
            </brief>
            <version>
 2.3
            </version>
            <Code> var changedCallback = function() {
     try {
         var current_dt = tizen.time.getCurrentDateTime();
         console.log(&quot;current date/time is &quot; + current_dt.toLocaleString());
         tizen.time.unsetDateTimeChangeListener();
     } catch (err) {
         console.log (err.name + &quot;: &quot; + err.message);
     }
 };

 tizen.time.setDateTimeChangeListener(changedCallback);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setTimezoneChangeListener" id="::Time::TimeUtil::setTimezoneChangeListener">
        <webidl>    void setTimezoneChangeListener(<ref>SuccessCallback</ref> changeCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sets a listener to receive notification of changes to the time zone on a device.
            </brief>
           <description>
            <p>
Listener set with <em>setTimezoneChangeListener()</em> method is called when device time zone has changed.
            </p>
           </description>
            <version>
 2.3
            </version>
            <Code> var changedCallback = function() {
     try {
         // The new time zone can be retrieved through tizen.time.getLocalTimezone()
         var zone = tizen.time.getLocalTimezone();
         console.log(&quot;current time zone is &quot; + zone);
     } catch (err) {
         console.log (err.name + &quot;: &quot; + err.message);
     }
 };

 tizen.time.setTimezoneChangeListener(changedCallback);

 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="changeCallback">
            <descriptive>
                <description><p>
 Callback method that is invoked when the time zone has changed
                </p></description>
            </descriptive>
            <Type name="SuccessCallback"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="unsetTimezoneChangeListener" id="::Time::TimeUtil::unsetTimezoneChangeListener">
        <webidl>    void unsetTimezoneChangeListener() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Unsets the listener to stop receiving notification of changes to the time zone on a device.
            </brief>
            <version>
 2.3
            </version>
            <Code> var changedCallback = function() {
     try {
         var zone = tizen.time.getLocalTimezone();
         console.log(&quot;current time zone is &quot; + zone);
         tizen.time.unsetTimezoneChangeListener();
     } catch (err) {
         console.log (err.name + &quot;: &quot; + err.message);
     }
 };

 tizen.time.setTimezoneChangeListener(changedCallback);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="TZDate" id="::Time::TZDate">
      <webidl>  [Constructor(optional Date? datetime, optional DOMString? timezone),
   Constructor(long year, long month, long day, optional long? hours, optional long? minutes, optional long? seconds, optional long? milliseconds, optional DOMString? timezone)]

  interface TZDate {
    long getDate();

    void setDate(long date);

    long getDay();

    long getFullYear();

    void setFullYear(long year);

    long getHours();

    void setHours(long hours);

    long getMilliseconds();

    void setMilliseconds(long ms);

    long getMinutes();

    void setMinutes(long minutes);

    long getMonth();

    void setMonth(long month);

    long getSeconds();

    void setSeconds(long seconds);

    long getUTCDate();

    void setUTCDate(long date);

    long getUTCDay();

    long getUTCFullYear();

    void setUTCFullYear(long year);

    long getUTCHours();

    void setUTCHours(long hours);

    long getUTCMilliseconds();

    void setUTCMilliseconds(long ms);

    long getUTCMinutes();

    void setUTCMinutes(long minutes);

    long getUTCMonth();

    void setUTCMonth(long month);

    long getUTCSeconds();

    void setUTCSeconds(long seconds);

    DOMString getTimezone();

    <ref>TZDate</ref> toTimezone(DOMString tzid) raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref> toLocalTimezone() raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref> toUTC() raises(<ref>WebAPIException</ref>);

    <ref>TimeDuration</ref> difference(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);

    boolean equalsTo(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);

    boolean earlierThan(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);

    boolean laterThan(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref> addDuration(<ref>TimeDuration</ref> duration) raises(<ref>WebAPIException</ref>);

    DOMString toLocaleDateString();

    DOMString toLocaleTimeString();

    DOMString toLocaleString();

    DOMString toDateString();

    DOMString toTimeString();

    DOMString toString();

    DOMString getTimezoneAbbreviation() raises(<ref>WebAPIException</ref>);

    long secondsFromUTC() raises(<ref>WebAPIException</ref>);

    boolean isDST() raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref>? getPreviousDSTTransition() raises(<ref>WebAPIException</ref>);

    <ref>TZDate</ref>? getNextDSTTransition() raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The TZDate interface represents information regarding a given
date/time in a predefined timezone.
If its date/time exceeds the platform limit, TZDate will be invalid.
          </brief>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(optional Date? datetime, optional DOMString? timezone)</webidl>
          <ArgumentList>
            <Argument optional="optional" name="datetime">
              <Type type="Date" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="timezone">
              <Type type="DOMString" nullable="nullable"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
        <ExtendedAttribute name="Constructor">
          <webidl>   Constructor(long year, long month, long day, optional long? hours, optional long? minutes, optional long? seconds, optional long? milliseconds, optional DOMString? timezone)</webidl>
          <descriptive>
             <description>
              <ul>
                <li>
<b>year</b> : The year of TZDate. If it is between 0 and 99, 1900 will be added to it like Javascript Date object.                </li>
              </ul>
             </description>
          </descriptive>
          <ArgumentList>
            <Argument name="year">
              <Type type="long"/>
            </Argument>
            <Argument name="month">
              <Type type="long"/>
            </Argument>
            <Argument name="day">
              <Type type="long"/>
            </Argument>
            <Argument optional="optional" name="hours">
              <Type type="long" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="minutes">
              <Type type="long" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="seconds">
              <Type type="long" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="milliseconds">
              <Type type="long" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="timezone">
              <Type type="DOMString" nullable="nullable"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="getDate" id="::Time::TZDate::getDate">
        <webidl>    long getDate();</webidl>
        <descriptive>
            <brief>
 Gets the day of the month (from 1-31).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The day of the month.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setDate" id="::Time::TZDate::setDate">
        <webidl>    void setDate(long date);</webidl>
        <descriptive>
            <brief>
 Sets the day of the month (from 1-31).
            </brief>
           <description>
            <p>
If it tries to set the day bigger than the last day of the month or smaller than 1, it will be calculated automatically.
For example, if TZDate's month is May and parameter is 32, it will be June 1.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="date">
            <descriptive>
                <description><p>
 Date to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getDay" id="::Time::TZDate::getDay">
        <webidl>    long getDay();</webidl>
        <descriptive>
            <brief>
 Gets the day of the week (from 0-6).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The day of the week
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="getFullYear" id="::Time::TZDate::getFullYear">
        <webidl>    long getFullYear();</webidl>
        <descriptive>
            <brief>
 Gets the year.
            </brief>
           <description>
            <p>
Positive values indicate AD(Anno Domini) years. 0 and negative values indicate BC(Before Christ) years.
For example, 1 = AD 1, 0 = BC 1, -1 = BC 2.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The year
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setFullYear" id="::Time::TZDate::setFullYear">
        <webidl>    void setFullYear(long year);</webidl>
        <descriptive>
            <brief>
 Sets the year.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="year">
            <descriptive>
                <description><p>
 Year to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getHours" id="::Time::TZDate::getHours">
        <webidl>    long getHours();</webidl>
        <descriptive>
            <brief>
 Gets the hour (0-23).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The hour
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setHours" id="::Time::TZDate::setHours">
        <webidl>    void setHours(long hours);</webidl>
        <descriptive>
            <brief>
 Sets the hour (0-23).
            </brief>
           <description>
            <p>
If it tries to set the hour bigger than 23 or smaller than 0, it will be calculated automatically.
For example, if hours is 24, it will set 0 and add to a date.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="hours">
            <descriptive>
                <description><p>
 Hours to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getMilliseconds" id="::Time::TZDate::getMilliseconds">
        <webidl>    long getMilliseconds();</webidl>
        <descriptive>
            <brief>
 Gets the milliseconds (from 0-999).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The milliseconds
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setMilliseconds" id="::Time::TZDate::setMilliseconds">
        <webidl>    void setMilliseconds(long ms);</webidl>
        <descriptive>
            <brief>
 Sets the milliseconds (from 0-999).
            </brief>
           <description>
            <p>
If it tries to set the millisecond bigger than 999 or smaller than 0, it will be calculated automatically.
For example, if ms is 1000, it will set 0 and add to a second.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="ms">
            <descriptive>
                <description><p>
 Milliseconds to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getMinutes" id="::Time::TZDate::getMinutes">
        <webidl>    long getMinutes();</webidl>
        <descriptive>
            <brief>
 Gets the minutes (from 0-59).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The minutes
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setMinutes" id="::Time::TZDate::setMinutes">
        <webidl>    void setMinutes(long minutes);</webidl>
        <descriptive>
            <brief>
 Sets the minutes.
            </brief>
           <description>
            <p>
If it tries to set the minute bigger than 59 or smaller than 0, it will be calculated automatically.
For example, if minutes is 60, it will set 0 and add to an hour.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="minutes">
            <descriptive>
                <description><p>
 Minutes to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getMonth" id="::Time::TZDate::getMonth">
        <webidl>    long getMonth();</webidl>
        <descriptive>
            <brief>
 Gets the month (from 0-11).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The month
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setMonth" id="::Time::TZDate::setMonth">
        <webidl>    void setMonth(long month);</webidl>
        <descriptive>
            <brief>
 Sets the month (from 0-11).
            </brief>
           <description>
            <p>
If it tries to set the month bigger than 11 or smaller than 0, it will be calculated automatically.
For example, if month is 12, it will set 0 and add to a year.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="month">
            <descriptive>
                <description><p>
 Month to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getSeconds" id="::Time::TZDate::getSeconds">
        <webidl>    long getSeconds();</webidl>
        <descriptive>
            <brief>
 Gets the seconds (from 0-59).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The seconds
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setSeconds" id="::Time::TZDate::setSeconds">
        <webidl>    void setSeconds(long seconds);</webidl>
        <descriptive>
            <brief>
 Sets the seconds (from 0-59).
            </brief>
           <description>
            <p>
If it tries to set the second bigger than 59 or smaller than 0, it will be calculated automatically.
For example, if seconds is 60, it will set 0 and add to a minute.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="seconds">
            <descriptive>
                <description><p>
 Seconds to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getUTCDate" id="::Time::TZDate::getUTCDate">
        <webidl>    long getUTCDate();</webidl>
        <descriptive>
            <brief>
 Gets the day of the month, according to universal time (from 1-31).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The day of the month, according to universal time
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setUTCDate" id="::Time::TZDate::setUTCDate">
        <webidl>    void setUTCDate(long date);</webidl>
        <descriptive>
            <brief>
 Sets the day of the month, according to universal time (from 1-31).
            </brief>
           <description>
            <p>
If it tries to set the day bigger than the last day of the month or smaller than 1, it will be calculated automatically.
For example, if TZDate's month is May and date is 32, it will be June 1.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="date">
            <descriptive>
                <description><p>
 Date to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getUTCDay" id="::Time::TZDate::getUTCDay">
        <webidl>    long getUTCDay();</webidl>
        <descriptive>
            <brief>
 Gets the day of the week, according to universal time (from 0-6).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The day of the week, according to universal time
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="getUTCFullYear" id="::Time::TZDate::getUTCFullYear">
        <webidl>    long getUTCFullYear();</webidl>
        <descriptive>
            <brief>
 Gets the year, according to universal time.
            </brief>
           <description>
            <p>
Positive values indicate AD(Anno Domini) years. 0 and negative values indicate BC(Before Christ) years.
For example, 1 = AD 1, 0 = BC 1, -1 = BC 2.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The year, according to universal time
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setUTCFullYear" id="::Time::TZDate::setUTCFullYear">
        <webidl>    void setUTCFullYear(long year);</webidl>
        <descriptive>
            <brief>
 Sets the year, according to universal time.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="year">
            <descriptive>
                <description><p>
 Year to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getUTCHours" id="::Time::TZDate::getUTCHours">
        <webidl>    long getUTCHours();</webidl>
        <descriptive>
            <brief>
 Gets the hour, according to universal time (0-23).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The hour, according to universal time
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setUTCHours" id="::Time::TZDate::setUTCHours">
        <webidl>    void setUTCHours(long hours);</webidl>
        <descriptive>
            <brief>
 Sets the hour, according to universal time (0-23).
            </brief>
           <description>
            <p>
If it tries to set the hour bigger than 23 or smaller than 0, it will be calculated automatically.
For example, if hours is 24, it will set 0 and add to a date.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="hours">
            <descriptive>
                <description><p>
 Hours to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getUTCMilliseconds" id="::Time::TZDate::getUTCMilliseconds">
        <webidl>    long getUTCMilliseconds();</webidl>
        <descriptive>
            <brief>
 Gets the milliseconds, according to universal time (from 0-999).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The milliseconds, according to universal time
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setUTCMilliseconds" id="::Time::TZDate::setUTCMilliseconds">
        <webidl>    void setUTCMilliseconds(long ms);</webidl>
        <descriptive>
            <brief>
 Sets the milliseconds, according to universal time (from 0-999).
            </brief>
           <description>
            <p>
If it tries to set the millisecond bigger than 999 or smaller than 0, it will be calculated automatically.
For example, if ms is 1000, it will set 0 and add to a second.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="ms">
            <descriptive>
                <description><p>
 Milliseconds to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getUTCMinutes" id="::Time::TZDate::getUTCMinutes">
        <webidl>    long getUTCMinutes();</webidl>
        <descriptive>
            <brief>
 Gets the minutes, according to universal time (from 0-59).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The minutes, according to universal time
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setUTCMinutes" id="::Time::TZDate::setUTCMinutes">
        <webidl>    void setUTCMinutes(long minutes);</webidl>
        <descriptive>
            <brief>
 Sets the minutes, according to universal time (from 0-59).
            </brief>
           <description>
            <p>
If it tries to set the minute bigger than 59 or smaller than 0, it will be calculated automatically.
For example, if minutes is 60, it will set 0 and add to an hour.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="minutes">
            <descriptive>
                <description><p>
 Minutes to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getUTCMonth" id="::Time::TZDate::getUTCMonth">
        <webidl>    long getUTCMonth();</webidl>
        <descriptive>
            <brief>
 Gets the month, according to universal time (from 0-11).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The month, according to universal time
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setUTCMonth" id="::Time::TZDate::setUTCMonth">
        <webidl>    void setUTCMonth(long month);</webidl>
        <descriptive>
            <brief>
 Sets the month, according to universal time (from 0-11).
            </brief>
           <description>
            <p>
If it tries to set the month bigger than 11 or smaller than 0, it will be calculated automatically.
For example, if month is 12, it will set 0 and add to a year.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="month">
            <descriptive>
                <description><p>
 Month to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getUTCSeconds" id="::Time::TZDate::getUTCSeconds">
        <webidl>    long getUTCSeconds();</webidl>
        <descriptive>
            <brief>
 Gets the seconds, according to universal time (from 0-59).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The seconds, according to universal time
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="setUTCSeconds" id="::Time::TZDate::setUTCSeconds">
        <webidl>    void setUTCSeconds(long seconds);</webidl>
        <descriptive>
            <brief>
 Sets the seconds, according to universal time (from 0-59).
            </brief>
           <description>
            <p>
If it tries to set the second bigger than 59 or smaller than 0, it will be calculated automatically.
For example, if seconds is 60, it will set 0 and add to a minute.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="seconds">
            <descriptive>
                <description><p>
 Seconds to set
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="getTimezone" id="::Time::TZDate::getTimezone">
        <webidl>    DOMString getTimezone();</webidl>
        <descriptive>
            <brief>
 Gets the timezone identifier.
            </brief>
           <description>
            <p>
Zero or more slashes separate different components, with the most general
descriptor first and the most specific one last. For example,
'Europe/Berlin', 'America/Argentina/Buenos_Aires'.
            </p>
            <p>
This attribute uniquely identifies the timezone.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The string timezone identifier <br/>If TZDate is invalid, it will return 'Invalid Date'.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="toTimezone" id="::Time::TZDate::toTimezone">
        <webidl>    <ref>TZDate</ref> toTimezone(DOMString tzid) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets a copy of the TZDate converted to a given time zone.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="TZDate">
          <descriptive>
              <description><p>
 TZDate The new TZDate in given Timezone
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="tzid">
            <descriptive>
                <description><p>
 Timezone identifier to set
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if the provided TZID
is not recognized as a valid timezone identifier.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="toLocalTimezone" id="::Time::TZDate::toLocalTimezone">
        <webidl>    <ref>TZDate</ref> toLocalTimezone() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets a copy of the TZDate converted to the local time zone.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="TZDate">
          <descriptive>
              <description><p>
 TZDate The new TZDate in local Timezone
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="toUTC" id="::Time::TZDate::toUTC">
        <webidl>    <ref>TZDate</ref> toUTC() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets a copy of the TZDate converted to Coordinated Universal Time (UTC).
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="TZDate">
          <descriptive>
              <description><p>
 TZDate The Date/Time in UTC
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="difference" id="::Time::TZDate::difference">
        <webidl>    <ref>TimeDuration</ref> difference(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Calculates the difference with another TZDate object.
            </brief>
           <description>
            <p>
Calculates the difference in time between <em>this</em> and the other object.
This comparison method takes timezones into consideration for the comparison.
            </p>
            <p>
The TimeDuration that is returned is effectively <em>this</em> - other.
The return value is a duration in milliseconds both TZDate objects have a time component, in days, otherwise.
The result value will be:
            </p>
            <ul>
              <li>
Negative, if other is in the future              </li>
              <li>
0 if the two date/times are equal              </li>
              <li>
Positive, if other is in the past              </li>
            </ul>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="TimeDuration">
          <descriptive>
              <description><p>
 TimeDuration The duration in milliseconds between the two date/time objects
(or in days for comparison between dates with no time component)
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="other">
            <descriptive>
                <description><p>
 The other Date/Time to compare to
                </p></description>
            </descriptive>
            <Type name="TZDate"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="equalsTo" id="::Time::TZDate::equalsTo">
        <webidl>    boolean equalsTo(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether the TZDate is equal to another.
            </brief>
           <description>
            <p>
This method takes the timezones into consideration and will return <em>true</em>if the two TZDate objects represent the same instant in different timezones.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean <em>true</em> if the 2 date/times are the same
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="other">
            <descriptive>
                <description><p>
 Other Date/Time to compare to
                </p></description>
            </descriptive>
            <Type name="TZDate"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="earlierThan" id="::Time::TZDate::earlierThan">
        <webidl>    boolean earlierThan(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether the TZDate is earlier than another.
            </brief>
           <description>
            <p>
This method takes the timezones into consideration.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean <em>true</em>, if the Date/Time is earlier than the one passed in argument
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="other">
            <descriptive>
                <description><p>
 The other Date/Time to compare to
                </p></description>
            </descriptive>
            <Type name="TZDate"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="laterThan" id="::Time::TZDate::laterThan">
        <webidl>    boolean laterThan(<ref>TZDate</ref> other) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether the TZDate is later than another.
            </brief>
           <description>
            <p>
This method takes the timezones into consideration.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean <em>true</em>, if the Date/Time is later than the one passed in argument
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="other">
            <descriptive>
                <description><p>
 The other Date/Time to compare to
                </p></description>
            </descriptive>
            <Type name="TZDate"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="addDuration" id="::Time::TZDate::addDuration">
        <webidl>    <ref>TZDate</ref> addDuration(<ref>TimeDuration</ref> duration) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets a new date by adding a duration to the current TZDate object.
            </brief>
           <description>
            <p>
If the length of duration is negative, the new date/time will be
earlier than it used to.
            </p>
            <p>
Note that calling this method does not alter the current object.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> var now = tizen.time.getCurrentDateTime();
 var in_one_week = now.addDuration(new tizen.TimeDuration(7, &quot;DAYS&quot;));
 </Code>
        </descriptive>
        <Type name="TZDate">
          <descriptive>
              <description><p>
 TZDate The new TZDate by adding a duration
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="duration">
            <descriptive>
                <description><p>
 TimeDuration to add
                </p></description>
            </descriptive>
            <Type name="TimeDuration"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="toLocaleDateString" id="::Time::TZDate::toLocaleDateString">
        <webidl>    DOMString toLocaleDateString();</webidl>
        <descriptive>
            <brief>
 Gets the date portion of a TZDate object as a string, using locale conventions.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The date portion of the TZDate object as a string, using locale conventions <br/>If TZDate is invalid, it will return 'Invalid Date'.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="toLocaleTimeString" id="::Time::TZDate::toLocaleTimeString">
        <webidl>    DOMString toLocaleTimeString();</webidl>
        <descriptive>
            <brief>
 Gets the time portion of a TZDate object as a string, using locale conventions.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The time portion of the TZDate object as a string, using locale conventions <br/>If TZDate is invalid, it will return 'Invalid Date'.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="toLocaleString" id="::Time::TZDate::toLocaleString">
        <webidl>    DOMString toLocaleString();</webidl>
        <descriptive>
            <brief>
 Converts a TZDate object to a string, using locale conventions.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The string representation of the TZDate object, using locale conventions <br/>If TZDate is invalid, it will return 'Invalid Date'.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="toDateString" id="::Time::TZDate::toDateString">
        <webidl>    DOMString toDateString();</webidl>
        <descriptive>
            <brief>
 Gets the date portion of a TZDate object as a string.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The date portion of the TZDate object as a string <br/>If TZDate is invalid, it will return 'Invalid Date'.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="toTimeString" id="::Time::TZDate::toTimeString">
        <webidl>    DOMString toTimeString();</webidl>
        <descriptive>
            <brief>
 Gets the time portion of a TZDate object as a string.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The time portion of the TZDate object as a string <br/>If TZDate is invalid, it will return 'Invalid Date'.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="toString" id="::Time::TZDate::toString">
        <webidl>    DOMString toString();</webidl>
        <descriptive>
            <brief>
 Converts a TZDate object to a string.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The string representation of the TZDate object <br/>If TZDate is invalid, it will return 'Invalid Date'.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
      </Operation>
      <Operation name="getTimezoneAbbreviation" id="::Time::TZDate::getTimezoneAbbreviation">
        <webidl>    DOMString getTimezoneAbbreviation() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Determines the time zone abbreviation to be used at a particular date in the time zone.
            </brief>
           <description>
            <p>
For example, in Toronto this is currently &quot;EST&quot; during the winter months and &quot;EDT&quot; during the
summer months when daylight savings time is in effect.
            </p>
           </description>
            <version>
 1.0
            </version>
            <deprecated>
 Some timezones return &quot;GMT[+-]hh:mm&quot;. It is inconsistent.
            </deprecated>
        </descriptive>
        <Type type="DOMString">
          <descriptive>
              <description><p>
 DOMString The abbreviation of the time zone (such as &quot;EST&quot;) <br/>If TZDate is invalid, it will return 'Invalid Date'.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="secondsFromUTC" id="::Time::TZDate::secondsFromUTC">
        <webidl>    long secondsFromUTC() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the number of seconds from Coordinated Universal Time (UTC) offset for the timezone.
            </brief>
           <description>
            <p>
Returns the offset (in seconds) from UTC of the timezone, accounting for daylight
savings if it is in the timezone. For example, if time zone is GMT+8, it will return -32,400.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> var offset = tizen.time.getCurrentDateTime().secondsFromUTC();
 var myDate = new Date();
 var exp_offset = myDate.getTimezoneOffset()*60;
 //offset is equals to exp_offset.
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The offset from UTC in seconds
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="isDST" id="::Time::TZDate::isDST">
        <webidl>    boolean isDST() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether Daylight Saving Time(DST) is active for this TZDate.
            </brief>
           <description>
            <p>
Indicates if daylight savings are in effect for the time zone and instant
identified by the TZDate object.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean The flag indicating whether the daylight saving are in effect
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getPreviousDSTTransition" id="::Time::TZDate::getPreviousDSTTransition">
        <webidl>    <ref>TZDate</ref>? getPreviousDSTTransition() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the date of the previous daylight saving time transition for the timezone.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="TZDate" nullable="nullable">
          <descriptive>
              <description><p>
 TZDate The date of the previous daylight saving transition (before the instant identified by the TZDate)
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getNextDSTTransition" id="::Time::TZDate::getNextDSTTransition">
        <webidl>    <ref>TZDate</ref>? getNextDSTTransition() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the date of the next daylight saving time transition for the timezone.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="TZDate" nullable="nullable">
          <descriptive>
              <description><p>
 TZDate The date of the next daylight saving transition (after the instant identified by the TZDate)
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="TimeDuration" id="::Time::TimeDuration">
      <webidl>  [Constructor(long long length, optional <ref>TimeDurationUnit</ref>? unit)]
  interface TimeDuration
  {
    attribute long long length;

    attribute <ref>TimeDurationUnit</ref> unit;

    <ref>TimeDuration</ref> difference(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);

    boolean equalsTo(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);

    boolean lessThan(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);

    boolean greaterThan(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 The TimeDuration interface that contains the length and its associated time unit.
          </brief>
          <version>
 1.0
          </version>
          <Code> var now = tizen.time.getCurrentDateTime();
 var tomorrow = now.addDuration(new tizen.TimeDuration(1, &quot;DAYS&quot;)); // Becomes tomorrow, same time.
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(long long length, optional <ref>TimeDurationUnit</ref>? unit)</webidl>
          <ArgumentList>
            <Argument name="length">
              <Type type="long long"/>
            </Argument>
            <Argument optional="optional" name="unit">
              <Type name="TimeDurationUnit" nullable="nullable"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute name="length" id="::Time::TimeDuration::length">
        <webidl>    attribute long long length;</webidl>
        <descriptive>
            <brief>
 The duration length.
            </brief>
           <description>
            <p>
The unit of the duration length (milliseconds, seconds, minutes, hours, or days)
is determined by the duration unit attribute.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="long long"/>
      </Attribute>
      <Attribute name="unit" id="::Time::TimeDuration::unit">
        <webidl>    attribute <ref>TimeDurationUnit</ref> unit;</webidl>
        <descriptive>
            <brief>
 The duration unit (milliseconds, seconds, minutes, hours, or days).
            </brief>
           <description>
            <p>
The default value is &quot;MSECS&quot; (milliseconds unit).
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="TimeDurationUnit"/>
      </Attribute>
      <Operation name="difference" id="::Time::TimeDuration::difference">
        <webidl>    <ref>TimeDuration</ref> difference(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Calculates the difference between two TimeDuration objects.
            </brief>
           <description>
            <p>
Calculates the difference in time between <em>this</em> and <em>other</em>.
The TimeDuration that is returned is effectively <em>first</em> - <em>other</em> (that is: positive if the first parameter is larger).
            </p>
            <p>
The returned TimeDuration is the biggest possible unit without losing the precision.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> // Assume that event1 and event2 are tizen.CalendarEvent objects.
 // Computes event1.duration - event2.duration
 var diff = event1.duration.difference(event2.duration);
 if (diff.length > 0)
   console.log(&quot;The event1 is longer than event2.&quot;);
 else if (diff.length == 0)
   console.log(&quot;The duration of two events is same.&quot;);
 else
   console.log(&quot;The event1 is shorter than the event2.&quot;);
 </Code>
        </descriptive>
        <Type name="TimeDuration">
          <descriptive>
              <description><p>
 The new TimeDuration object corresponding to the result of <em>this</em> - <em>other</em>.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="other">
            <descriptive>
                <description><p>
 Other TimeDuration object to compare to
                </p></description>
            </descriptive>
            <Type name="TimeDuration"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="equalsTo" id="::Time::TimeDuration::equalsTo">
        <webidl>    boolean equalsTo(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether the TimeDuration is equal to another.
            </brief>
           <description>
            <p>
This method takes the units into consideration and will return true
if the two TimeDuration objects represent the same duration in different units.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> var d1 = new tizen.TimeDuration(60, &quot;MINS&quot;); // 60 minutes
 var d2 = new tizen.TimeDuration(1, &quot;HOURS&quot;); // 1 hour
 var ret = d1.equalsTo(d2); // Returns true
 </Code>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean <em>true</em> if the two TimeDuration object represent the same duration
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="other">
            <descriptive>
                <description><p>
 Other TimeDuration object to compare to
                </p></description>
            </descriptive>
            <Type name="TimeDuration"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="lessThan" id="::Time::TimeDuration::lessThan">
        <webidl>    boolean lessThan(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether the TimeDuration is lower than another.
            </brief>
           <description>
            <p>
This method takes the units into consideration when doing the comparison.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> var d1 = new tizen.TimeDuration(1, &quot;HOURS&quot;); // 1 hour
 var d2 = new tizen.TimeDuration(120, &quot;MINS&quot;); // 120 minutes
 var ret = d1.lessThan(d2); // Returns true
 </Code>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean <em>true</em> if the TimeDuration is less than <em>other</em>              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="other">
            <descriptive>
                <description><p>
 Other TimeDuration object to compare to
                </p></description>
            </descriptive>
            <Type name="TimeDuration"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="greaterThan" id="::Time::TimeDuration::greaterThan">
        <webidl>    boolean greaterThan(<ref>TimeDuration</ref> other) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether the TimeDuration is greater than another.
            </brief>
           <description>
            <p>
This method takes the units into consideration when doing the comparison.
            </p>
           </description>
            <version>
 1.0
            </version>
            <Code> var d1 = new tizen.TimeDuration(120, &quot;MINS&quot;); // 120 minutes
 var d2 = new tizen.TimeDuration(1, &quot;HOURS&quot;); // 1 hour
 var ret = d1.greaterThan(d2); // Returns true
 </Code>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean <em>true</em> if the TimeDuration is greater than <em>other</em>              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="other">
            <descriptive>
                <description><p>
 Other TimeDuration object to compare to
                </p></description>
            </descriptive>
            <Type name="TimeDuration"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter
is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type UnknownError, if the call failed due to an unknown error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
  </Module>
  <Module name="Tizen" id="::Tizen">
    <webidl>module Tizen {
  enum FilterMatchFlag { &quot;EXACTLY&quot;, &quot;FULLSTRING&quot;, &quot;CONTAINS&quot;, &quot;STARTSWITH&quot;, &quot;ENDSWITH&quot;, &quot;EXISTS&quot; };

  enum SortModeOrder { &quot;ASC&quot;, &quot;DESC&quot; };

  enum CompositeFilterType { &quot;UNION&quot;, &quot;INTERSECTION&quot; };

  [NoInterfaceObject] interface TizenObject {
    readonly attribute <ref>Tizen</ref> tizen;
  };
  <ref>Window</ref> implements <ref>TizenObject</ref>;

  [NoInterfaceObject] interface Tizen {
  };

  [NoInterfaceObject] interface AbstractFilter {
  };

  [Constructor(DOMString attributeName, optional <ref>FilterMatchFlag</ref>? matchFlag, optional any matchValue)]
  interface AttributeFilter : <ref>AbstractFilter</ref> {
    attribute DOMString attributeName;

    attribute <ref>FilterMatchFlag</ref> matchFlag setraises(<ref>WebAPIException</ref>);

    attribute any matchValue;
  };

  [Constructor(DOMString attributeName, optional any initialValue, optional any endValue)]
  interface AttributeRangeFilter : <ref>AbstractFilter</ref> {
    attribute DOMString attributeName;

    attribute any initialValue;

    attribute any endValue;
  };

  [Constructor(<ref>CompositeFilterType</ref> type, optional <ref>AbstractFilter</ref>[]? filters)]
  interface CompositeFilter : <ref>AbstractFilter</ref> {

    attribute <ref>CompositeFilterType</ref> type;

    attribute <ref>AbstractFilter</ref>[] filters;
  };

  [Constructor(DOMString attributeName, optional <ref>SortModeOrder</ref>? order)]
  interface SortMode {
    attribute DOMString attributeName;

    attribute <ref>SortModeOrder</ref> order setraises(<ref>WebAPIException</ref>);
  };

  [Constructor(double latitude, double longitude)]
  interface SimpleCoordinates {
    attribute double latitude setraises(<ref>WebAPIException</ref>);

    attribute double longitude setraises(<ref>WebAPIException</ref>);
  };

  [NoInterfaceObject]
  interface WebAPIException {
    readonly attribute unsigned short code;

    readonly attribute DOMString name;

    readonly attribute DOMString message;

    const unsigned short INDEX_SIZE_ERR = 1;
    const unsigned short DOMSTRING_SIZE_ERR = 2; 
    const unsigned short HIERARCHY_REQUEST_ERR = 3;
    const unsigned short WRONG_DOCUMENT_ERR = 4;
    const unsigned short INVALID_CHARACTER_ERR = 5;
    const unsigned short NO_DATA_ALLOWED_ERR = 6; 
    const unsigned short NO_MODIFICATION_ALLOWED_ERR = 7;
    const unsigned short NOT_FOUND_ERR = 8;
    const unsigned short NOT_SUPPORTED_ERR = 9;
    const unsigned short INUSE_ATTRIBUTE_ERR = 10; 
    const unsigned short INVALID_STATE_ERR = 11;
    const unsigned short SYNTAX_ERR = 12;
    const unsigned short INVALID_MODIFICATION_ERR = 13;
    const unsigned short NAMESPACE_ERR = 14;
    const unsigned short INVALID_ACCESS_ERR = 15;
    const unsigned short VALIDATION_ERR = 16; 
    const unsigned short TYPE_MISMATCH_ERR = 17;
    const unsigned short SECURITY_ERR = 18;
    const unsigned short NETWORK_ERR = 19;
    const unsigned short ABORT_ERR = 20;
    const unsigned short URL_MISMATCH_ERR = 21;
    const unsigned short QUOTA_EXCEEDED_ERR = 22;
    const unsigned short TIMEOUT_ERR = 23;
    const unsigned short INVALID_NODE_TYPE_ERR = 24;
    const unsigned short DATA_CLONE_ERR = 25;
  };

  [NoInterfaceObject]
  interface WebAPIError {
    readonly attribute unsigned short code;

    readonly attribute DOMString name;

    readonly attribute DOMString message;
  };

  [Callback=FunctionOnly, NoInterfaceObject]
  interface SuccessCallback {
    void onsuccess ();
  };

  [Callback=FunctionOnly, NoInterfaceObject]
  interface ErrorCallback {

    void onerror (<ref>WebAPIError</ref> error);
  };
};</webidl>
    <descriptive>
        <brief>
 This API provides common Tizen functionality.
        </brief>
       <description>
        <p>
The API provides the basic definitions that are used in the Tizen Web Device API.
These include generic callbacks that are invoked when the operations succeed or fail,
WebAPIError and WebAPIException that give information of the platform's error and
filter interfaces that are used to make query statements for searching.
        </p>
        <p>
Additionally, this API specifies the location in the ECMAScript hierarchy in which
the Tizen Web Device API is instantiated (<em>window.tizen</em>).
        </p>
        <p>
For more information on the Tizen features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/tizen_guide/tizen.htm">Tizen Guide</a>.  
        </p>
       </description>
        <version>
 1.0
        </version>
    </descriptive>
    <Enum name="FilterMatchFlag" id="::Tizen::FilterMatchFlag">
      <webidl>  enum FilterMatchFlag { &quot;EXACTLY&quot;, &quot;FULLSTRING&quot;, &quot;CONTAINS&quot;, &quot;STARTSWITH&quot;, &quot;ENDSWITH&quot;, &quot;EXISTS&quot; };</webidl>
      <descriptive>
          <brief>
 Filter match flags.
          </brief>
         <description>
          <p>
These values are supported:
          </p>
          <ul>
            <li>
EXACTLY - Indicates that an attribute value should match exactly with the specified default value.
For strings, this type of comparison is case-sensitive.            </li>
            <li>
FULLSTRING - Indicates String-based comparison and that the attribute value should match the whole string (case insensitive).            </li>
            <li>
CONTAINS - Indicates that an attribute value should contain the specified string. This type of comparison works only on strings and is case insensitive.            </li>
            <li>
STARTSWITH - Indicates that an attribute value should start with the specified string.
This type of comparison works only on strings and is case insensitive.            </li>
            <li>
ENDSWITH - Indicates that an attribute value should end with the specified string. This type of comparison works only on strings and is case insensitive.            </li>
            <li>
EXISTS - Indicates that a filter comparison should match if the specified attribute exists.            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <EnumValue stringvalue="EXACTLY">
        <webidl> &quot;EXACTLY</webidl>
      </EnumValue>
      <EnumValue stringvalue="FULLSTRING">
        <webidl> &quot;FULLSTRING</webidl>
      </EnumValue>
      <EnumValue stringvalue="CONTAINS">
        <webidl> &quot;CONTAINS</webidl>
      </EnumValue>
      <EnumValue stringvalue="STARTSWITH">
        <webidl> &quot;STARTSWITH</webidl>
      </EnumValue>
      <EnumValue stringvalue="ENDSWITH">
        <webidl> &quot;ENDSWITH</webidl>
      </EnumValue>
      <EnumValue stringvalue="EXISTS">
        <webidl> &quot;EXISTS</webidl>
      </EnumValue>
    </Enum>
    <Enum name="SortModeOrder" id="::Tizen::SortModeOrder">
      <webidl>  enum SortModeOrder { &quot;ASC&quot;, &quot;DESC&quot; };</webidl>
      <descriptive>
          <brief>
 An enumerator that indicates the sorting order.
          </brief>
         <description>
          <p>
The following values are supported:
          </p>
          <ul>
            <li>
ASC - Indicates that the sorting order is ascending            </li>
            <li>
DESC - Indicates that the sorting order is descending            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <EnumValue stringvalue="ASC">
        <webidl> &quot;ASC</webidl>
      </EnumValue>
      <EnumValue stringvalue="DESC">
        <webidl> &quot;DESC</webidl>
      </EnumValue>
    </Enum>
    <Enum name="CompositeFilterType" id="::Tizen::CompositeFilterType">
      <webidl>  enum CompositeFilterType { &quot;UNION&quot;, &quot;INTERSECTION&quot; };</webidl>
      <descriptive>
          <brief>
 An enumerator that indicates the type of composite filter.
          </brief>
         <description>
          <p>
The following values are supported:
          </p>
          <ul>
            <li>
UNION - Indicates that the composite is a union of filters (&quot;OR&quot; operator)            </li>
            <li>
INTERSECTION - Indicates that the composite is an intersection of filters (&quot;AND&quot; operator)            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <EnumValue stringvalue="UNION">
        <webidl> &quot;UNION</webidl>
      </EnumValue>
      <EnumValue stringvalue="INTERSECTION">
        <webidl> &quot;INTERSECTION</webidl>
      </EnumValue>
    </Enum>
    <Interface name="TizenObject" id="::Tizen::TizenObject">
      <webidl>  [NoInterfaceObject] interface TizenObject {
    readonly attribute <ref>Tizen</ref> tizen;
  };</webidl>
      <descriptive>
          <brief>
 Defines the tizen interface as a part of the window global object.
          </brief>
         <description>
          <p>
The <em>Tizen</em> interface is always available within the <em>Window </em>object in the ECMAScript hierarchy.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="tizen" id="::Tizen::TizenObject::tizen">
        <webidl>    readonly attribute <ref>Tizen</ref> tizen;</webidl>
        <Type name="Tizen"/>
      </Attribute>
    </Interface>
    <Implements name1="Window" name2="TizenObject">
      <webidl>  <ref>Window</ref> implements <ref>TizenObject</ref>;</webidl>
    </Implements>
    <Interface name="Tizen" id="::Tizen::Tizen">
      <webidl>  [NoInterfaceObject] interface Tizen {
  };</webidl>
      <descriptive>
          <brief>
 The root of the Tizen Web Device API.
          </brief>
         <description>
          <p>
This is the Tizen root interface.
It is a property of the ECMAScript global object, as specified by the <em>TizenObject</em> interface.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
    </Interface>
    <Interface name="AbstractFilter" id="::Tizen::AbstractFilter">
      <webidl>  [NoInterfaceObject] interface AbstractFilter {
  };</webidl>
      <descriptive>
          <brief>
 This is a common interface used by different types of
object filters.
          </brief>
         <description>
          <p>
Never use this base interface directly, instead use <em>AbstractFilter</em> subtypes,
such as <em>AttributeFilter</em>, <em>AttributeRangeFilter</em>, and <em>CompositeFilter</em>.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
    </Interface>
    <Interface name="AttributeFilter" id="::Tizen::AttributeFilter">
      <webidl>  [Constructor(DOMString attributeName, optional <ref>FilterMatchFlag</ref>? matchFlag, optional any matchValue)]
  interface AttributeFilter : <ref>AbstractFilter</ref> {
    attribute DOMString attributeName;

    attribute <ref>FilterMatchFlag</ref> matchFlag setraises(<ref>WebAPIException</ref>);

    attribute any matchValue;
  };</webidl>
      <descriptive>
          <brief>
 This interface represents a set of filters.
          </brief>
         <description>
          <p>
It represents the query statement for the specified value of <em>matchValue</em> by the rule of <em>matchFlag</em>.
          </p>
          <p>
If no <em>matchValue</em> is defined, the filter matches all objects that have the attribute
defined (same as the &quot;EXISTS&quot; filter works), otherwise, it only matches objects which have an attribute that match
the specified value.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code> // The following example retrieves all songs from the album &quot;The Joshua Tree&quot;.
 var count = 100;
 var offset = 0;
 var albumFilter = new tizen.AttributeFilter(&quot;album&quot;, &quot;EXACTLY&quot;, &quot;The Joshua Tree&quot;);

 function errorCB(err) {
     console.log( 'The following error occurred: ' +  err.name);
 }

 function findCB(contents) {
     console.log('The Joshua Tree :' + contents.length);
 }

 tizen.content.find(findCB, errorCB, null, albumFilter, null, count, offset);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(DOMString attributeName, optional <ref>FilterMatchFlag</ref>? matchFlag, optional any matchValue)</webidl>
          <ArgumentList>
            <Argument name="attributeName">
              <Type type="DOMString"/>
            </Argument>
            <Argument optional="optional" name="matchFlag">
              <Type name="FilterMatchFlag" nullable="nullable"/>
            </Argument>
            <Argument optional="optional" name="matchValue">
              <Type type="any"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="AbstractFilter"/>
      </InterfaceInheritance>
      <Attribute name="attributeName" id="::Tizen::AttributeFilter::attributeName">
        <webidl>    attribute DOMString attributeName;</webidl>
        <descriptive>
            <brief>
 The name of the object attribute used for filtering.
            </brief>
           <description>
            <p>
This is the name of the object attribute exactly as it is defined in
the object's interface. For attributes of complex type, use fully-qualified names
(such as 'geolocation.latitude' to filter a video or image content's latitude in a geolocation).
            </p>
            <p>
For attributes of an array type, the filter will match if any value in the array
matches.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute name="matchFlag" id="::Tizen::AttributeFilter::matchFlag">
        <webidl>    attribute <ref>FilterMatchFlag</ref> matchFlag setraises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 The match flag used for attribute-based filtering.
            </brief>
           <description>
            <p>
By default, this attribute is set to &quot;EXACTLY&quot;.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="FilterMatchFlag"/>
        <SetRaises>
          <RaiseException name="WebAPIException"/>
        </SetRaises>
      </Attribute>
      <Attribute name="matchValue" id="::Tizen::AttributeFilter::matchValue">
        <webidl>    attribute any matchValue;</webidl>
        <descriptive>
            <brief>
 The value used for matching.
            </brief>
           <description>
            <p>
The filter will match if the attribute value matches the given matchValue.
            </p>
            <p>
This value is not used if the <em>matchFlag</em> is set to &quot;EXISTS&quot;.
By default, this attribute is set to <var>null</var>.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="any"/>
      </Attribute>
    </Interface>
    <Interface name="AttributeRangeFilter" id="::Tizen::AttributeRangeFilter">
      <webidl>  [Constructor(DOMString attributeName, optional any initialValue, optional any endValue)]
  interface AttributeRangeFilter : <ref>AbstractFilter</ref> {
    attribute DOMString attributeName;

    attribute any initialValue;

    attribute any endValue;
  };</webidl>
      <descriptive>
          <brief>
 <em>AttributeRangeFilter</em> represents a filter based on an object attribute
which has values that are within a particular range.
          </brief>
         <description>
          <p>
Range filters, where only one boundary is set, are available.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code> var count = 100;
 var offset = 0;
 // Use the modifiedDate attribute with a range that starts today and ends in 1 day
 // (meaning that you search for all contents modified today)
 var today = new Date();
 var today_begin = new Date(today.getFullYear(), today.getMonth(),today.getDate());
 var today_end = new Date(today.getFullYear(), today.getMonth(),today.getDate()+1);
 var dateRangeFilter = new tizen.AttributeRangeFilter(&quot;modifiedDate&quot;, today_begin, today_end);

 function errorCB(err) {
     console.log( 'The following error occurred: ' +  err.name);
 }

 function findCB(contents) {
     console.log('The contents modified today :' + contents.length);
 }

 tizen.content.find(findCB, errorCB, null, dateRangeFilter, null, count, offset);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(DOMString attributeName, optional any initialValue, optional any endValue)</webidl>
          <ArgumentList>
            <Argument name="attributeName">
              <Type type="DOMString"/>
            </Argument>
            <Argument optional="optional" name="initialValue">
              <Type type="any"/>
            </Argument>
            <Argument optional="optional" name="endValue">
              <Type type="any"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="AbstractFilter"/>
      </InterfaceInheritance>
      <Attribute name="attributeName" id="::Tizen::AttributeRangeFilter::attributeName">
        <webidl>    attribute DOMString attributeName;</webidl>
        <descriptive>
            <brief>
 The name of the object attribute used for filtering.
            </brief>
           <description>
            <p>
The value of this attribute is exactly as it is defined in the object's interface. For attributes of complex type, use fully-qualified names
(such as 'geolocation.latitude' to filter a video or image content's latitude in a geolocation).
            </p>
            <p>
For attributes of array type, the filter will match if any value in the array
matches.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute name="initialValue" id="::Tizen::AttributeRangeFilter::initialValue">
        <webidl>    attribute any initialValue;</webidl>
        <descriptive>
            <brief>
 Objects with an attribute that is greater than or equal to <em>initialValue</em> will match.
            </brief>
           <description>
            <p>
By default, this attribute is set to <var>null</var>.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="any"/>
      </Attribute>
      <Attribute name="endValue" id="::Tizen::AttributeRangeFilter::endValue">
        <webidl>    attribute any endValue;</webidl>
        <descriptive>
            <brief>
 Objects with an attribute that is strictly lower than or equal to <em>endValue</em> will match.
            </brief>
           <description>
            <p>
By default, this attribute is set to <var>null</var>.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="any"/>
      </Attribute>
    </Interface>
    <Interface name="CompositeFilter" id="::Tizen::CompositeFilter">
      <webidl>  [Constructor(<ref>CompositeFilterType</ref> type, optional <ref>AbstractFilter</ref>[]? filters)]
  interface CompositeFilter : <ref>AbstractFilter</ref> {

    attribute <ref>CompositeFilterType</ref> type;

    attribute <ref>AbstractFilter</ref>[] filters;
  };</webidl>
      <descriptive>
          <brief>
 <em>CompositeFilter</em> represents a set of filters.
          </brief>
         <description>
          <p>
The composite filters can be one of the following 2 types:
          </p>
          <ul>
            <li>
The union - used to filter objects that match any of the filters it includes.            </li>
            <li>
The intersection - used to filter objects that match all the filters it includes.            </li>
          </ul>
         </description>
          <version>
 1.0
          </version>
          <Code> // The following example retrieves all songs from the album &quot;The Joshua Tree&quot;, by artist &quot;U2&quot;.
 var count = 100;
 var offset = 0;
 var artistFilter = new tizen.AttributeFilter(&quot;artists&quot;, &quot;EXACTLY&quot;, &quot;U2&quot;);
 var albumFilter = new tizen.AttributeFilter(&quot;album&quot;, &quot;EXACTLY&quot;, &quot;The Joshua Tree&quot;);
 var filter = new tizen.CompositeFilter(&quot;INTERSECTION&quot;, [albumFilter, artistFilter]);

 function errorCB(err) {
     console.log( 'The following error occurred: ' +  err.name);
 }

 function findCB(contents) {
     console.log('The Joshua Tree by U2:' + contents.length);
 }

 tizen.content.find(findCB, errorCB, null, filter, null, count, offset);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(<ref>CompositeFilterType</ref> type, optional <ref>AbstractFilter</ref>[]? filters)</webidl>
          <ArgumentList>
            <Argument name="type">
              <Type name="CompositeFilterType"/>
            </Argument>
            <Argument optional="optional" name="filters">
              <Type type="array" nullable="nullable">
                <Type name="AbstractFilter"/>
              </Type>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <InterfaceInheritance>
        <Name name="AbstractFilter"/>
      </InterfaceInheritance>
      <Attribute name="type" id="::Tizen::CompositeFilter::type">
        <webidl>    attribute <ref>CompositeFilterType</ref> type;</webidl>
        <descriptive>
            <brief>
 The composite filter type.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="CompositeFilterType"/>
      </Attribute>
      <Attribute name="filters" id="::Tizen::CompositeFilter::filters">
        <webidl>    attribute <ref>AbstractFilter</ref>[] filters;</webidl>
        <descriptive>
            <brief>
 The list of filters in the composite filter.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="array">
          <Type name="AbstractFilter"/>
        </Type>
      </Attribute>
    </Interface>
    <Interface name="SortMode" id="::Tizen::SortMode">
      <webidl>  [Constructor(DOMString attributeName, optional <ref>SortModeOrder</ref>? order)]
  interface SortMode {
    attribute DOMString attributeName;

    attribute <ref>SortModeOrder</ref> order setraises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 <em>SortMode</em> is a common interface used for sorting of queried data.
          </brief>
         <description>
          <p>
Note that the sorting result of list type attributes is not determined.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code> // The following example retrieves all songs from the album &quot;The Joshua Tree&quot;, by artist &quot;U2&quot;, ordered by the track number.
 var count = 100;
 var offset = 0;
 var sortMode = new tizen.SortMode(&quot;trackNumber&quot;, &quot;ASC&quot;);
 var artistFilter = new tizen.AttributeFilter(&quot;artists&quot;, &quot;EXACTLY&quot;, &quot;U2&quot;);
 var albumFilter = new tizen.AttributeFilter(&quot;album&quot;, &quot;EXACTLY&quot;, &quot;The Joshua Tree&quot;);
 var filter = new tizen.CompositeFilter(&quot;INTERSECTION&quot;, [albumFilter, artistFilter]);

 function errorCB(err) {
     console.log( 'The following error occurred: ' +  err.name);
 }

 function printContent(content, index, contents) {
     console.log('Track: ' + content.trackNumber + ' Title: ' + content.title + 'Duration: ' + content.duration + 'URL: ' + content.contentURI + 'MIME: ' + content.mimeType);
 }

 function findCB(contents) {
     console.log('The Joshua Tree by U2:');
     contents.forEach(printContent);
     // Increase the offset as much as the count and then find content again.
     if (contents.length == count) {
         offset += count;
         tizen.content.find(findCB, errorCB, null, filter, sortMode, count, offset);
     }
 }

 tizen.content.find(findCB, errorCB, null, filter, sortMode, count, offset);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(DOMString attributeName, optional <ref>SortModeOrder</ref>? order)</webidl>
          <ArgumentList>
            <Argument name="attributeName">
              <Type type="DOMString"/>
            </Argument>
            <Argument optional="optional" name="order">
              <Type name="SortModeOrder" nullable="nullable"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute name="attributeName" id="::Tizen::SortMode::attributeName">
        <webidl>    attribute DOMString attributeName;</webidl>
        <descriptive>
            <brief>
 The name of the object attribute used for sorting.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute name="order" id="::Tizen::SortMode::order">
        <webidl>    attribute <ref>SortModeOrder</ref> order setraises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 The type of the sorting.
            </brief>
           <description>
            <p>
By default, this attribute is set to <var>ASC</var>.
            </p>
           </description>
            <version>
 1.0
            </version>
        </descriptive>
        <Type name="SortModeOrder"/>
        <SetRaises>
          <RaiseException name="WebAPIException"/>
        </SetRaises>
      </Attribute>
    </Interface>
    <Interface name="SimpleCoordinates" id="::Tizen::SimpleCoordinates">
      <webidl>  [Constructor(double latitude, double longitude)]
  interface SimpleCoordinates {
    attribute double latitude setraises(<ref>WebAPIException</ref>);

    attribute double longitude setraises(<ref>WebAPIException</ref>);
  };</webidl>
      <descriptive>
          <brief>
 <em>SimpleCoordinates</em> represents a point (latitude and longitude) in the map coordinate system.
          </brief>
         <description>
          <p>
Latitude and longitude are of the WGS84 datum.
          </p>
         </description>
          <version>
 1.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Constructor">
          <webidl>Constructor(double latitude, double longitude)</webidl>
          <ArgumentList>
            <Argument name="latitude">
              <Type type="double"/>
            </Argument>
            <Argument name="longitude">
              <Type type="double"/>
            </Argument>
          </ArgumentList>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute name="latitude" id="::Tizen::SimpleCoordinates::latitude">
        <webidl>    attribute double latitude setraises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Latitude.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
        <SetRaises>
          <RaiseException name="WebAPIException"/>
        </SetRaises>
      </Attribute>
      <Attribute name="longitude" id="::Tizen::SimpleCoordinates::longitude">
        <webidl>    attribute double longitude setraises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Longitude.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="double"/>
        <SetRaises>
          <RaiseException name="WebAPIException"/>
        </SetRaises>
      </Attribute>
    </Interface>
    <Interface name="WebAPIException" id="::Tizen::WebAPIException">
      <webidl>  [NoInterfaceObject]
  interface WebAPIException {
    readonly attribute unsigned short code;

    readonly attribute DOMString name;

    readonly attribute DOMString message;

    const unsigned short INDEX_SIZE_ERR = 1;
    const unsigned short DOMSTRING_SIZE_ERR = 2; 
    const unsigned short HIERARCHY_REQUEST_ERR = 3;
    const unsigned short WRONG_DOCUMENT_ERR = 4;
    const unsigned short INVALID_CHARACTER_ERR = 5;
    const unsigned short NO_DATA_ALLOWED_ERR = 6; 
    const unsigned short NO_MODIFICATION_ALLOWED_ERR = 7;
    const unsigned short NOT_FOUND_ERR = 8;
    const unsigned short NOT_SUPPORTED_ERR = 9;
    const unsigned short INUSE_ATTRIBUTE_ERR = 10; 
    const unsigned short INVALID_STATE_ERR = 11;
    const unsigned short SYNTAX_ERR = 12;
    const unsigned short INVALID_MODIFICATION_ERR = 13;
    const unsigned short NAMESPACE_ERR = 14;
    const unsigned short INVALID_ACCESS_ERR = 15;
    const unsigned short VALIDATION_ERR = 16; 
    const unsigned short TYPE_MISMATCH_ERR = 17;
    const unsigned short SECURITY_ERR = 18;
    const unsigned short NETWORK_ERR = 19;
    const unsigned short ABORT_ERR = 20;
    const unsigned short URL_MISMATCH_ERR = 21;
    const unsigned short QUOTA_EXCEEDED_ERR = 22;
    const unsigned short TIMEOUT_ERR = 23;
    const unsigned short INVALID_NODE_TYPE_ERR = 24;
    const unsigned short DATA_CLONE_ERR = 25;
  };</webidl>
      <descriptive>
          <brief>
 Generic exception interface.
          </brief>
         <description>
          <p>
This interface will be used by the APIs to throw errors synchronously.
          </p>
          <p>
The attempt to set an attribute value may or may not raise WebAPIException synchronously with error type TypeMismatchError or InvalidValuesError.
          </p>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="code" id="::Tizen::WebAPIException::code">
        <webidl>    readonly attribute unsigned short code;</webidl>
        <descriptive>
            <brief>
 16-bit error code.
            </brief>
           <description>
            <p>
For the possible values of this attribute, see <a href="http://www.w3.org/TR/dom/#domexception">DOMException</a>.
            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Attribute>
      <Attribute readonly="readonly" name="name" id="::Tizen::WebAPIException::name">
        <webidl>    readonly attribute DOMString name;</webidl>
        <descriptive>
            <brief>
 An error type. The name attribute must return the value it had been initialized with.
            </brief>
           <description>
            <p>
This attribute can have one of the following values:
            </p>
            <ul>
              <li>
UnknownError - An unknown error has occurred.              </li>
              <li>
InvalidValuesError - The content of an object does not contain valid values.              </li>
              <li>
IOError - An error occurred in communication with the underlying implementation and so the requested method cannot be completed.              </li>
              <li>
ServiceNotAvailableError - The requested service is not available.              </li>
            </ul>
            <p>
For other possible values of this attribute, see the values defined in <a href="http://www.w3.org/TR/dom/#error-names-0">DOM error names</a>            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="message" id="::Tizen::WebAPIException::message">
        <webidl>    readonly attribute DOMString message;</webidl>
        <descriptive>
            <brief>
 An error message that describes the details of an encountered error.
            </brief>
           <description>
            <p>
This attribute is mainly intended to be used for developers rather than end users, so it should not be used directly in the user interfaces as it is.
            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Const name="INDEX_SIZE_ERR" value="1" id="::Tizen::WebAPIException::INDEX_SIZE_ERR">
        <webidl>    const unsigned short INDEX_SIZE_ERR = 1;</webidl>
        <descriptive>
            <brief>
 The index is not in the allowed range.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="DOMSTRING_SIZE_ERR" value="2" id="::Tizen::WebAPIException::DOMSTRING_SIZE_ERR">
        <webidl>    const unsigned short DOMSTRING_SIZE_ERR = 2;</webidl>
        <descriptive>
            <brief>
 The specified range of text is too large.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="HIERARCHY_REQUEST_ERR" value="3" id="::Tizen::WebAPIException::HIERARCHY_REQUEST_ERR">
        <webidl>    const unsigned short HIERARCHY_REQUEST_ERR = 3;</webidl>
        <descriptive>
            <brief>
 The operation would yield an incorrect node tree.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="WRONG_DOCUMENT_ERR" value="4" id="::Tizen::WebAPIException::WRONG_DOCUMENT_ERR">
        <webidl>    const unsigned short WRONG_DOCUMENT_ERR = 4;</webidl>
        <descriptive>
            <brief>
 The object is in the wrong document.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="INVALID_CHARACTER_ERR" value="5" id="::Tizen::WebAPIException::INVALID_CHARACTER_ERR">
        <webidl>    const unsigned short INVALID_CHARACTER_ERR = 5;</webidl>
        <descriptive>
            <brief>
 The string contains invalid characters.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="NO_DATA_ALLOWED_ERR" value="6" id="::Tizen::WebAPIException::NO_DATA_ALLOWED_ERR">
        <webidl>    const unsigned short NO_DATA_ALLOWED_ERR = 6;</webidl>
        <descriptive>
            <brief>
 Data is specified for a node that does not support data.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="NO_MODIFICATION_ALLOWED_ERR" value="7" id="::Tizen::WebAPIException::NO_MODIFICATION_ALLOWED_ERR">
        <webidl>    const unsigned short NO_MODIFICATION_ALLOWED_ERR = 7;</webidl>
        <descriptive>
            <brief>
 The object cannot be modified.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="NOT_FOUND_ERR" value="8" id="::Tizen::WebAPIException::NOT_FOUND_ERR">
        <webidl>    const unsigned short NOT_FOUND_ERR = 8;</webidl>
        <descriptive>
            <brief>
 The object cannot be found here.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="NOT_SUPPORTED_ERR" value="9" id="::Tizen::WebAPIException::NOT_SUPPORTED_ERR">
        <webidl>    const unsigned short NOT_SUPPORTED_ERR = 9;</webidl>
        <descriptive>
            <brief>
 The operation is not supported.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="INUSE_ATTRIBUTE_ERR" value="10" id="::Tizen::WebAPIException::INUSE_ATTRIBUTE_ERR">
        <webidl>    const unsigned short INUSE_ATTRIBUTE_ERR = 10;</webidl>
        <descriptive>
            <brief>
 The specified attribute is already in use elsewhere.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="INVALID_STATE_ERR" value="11" id="::Tizen::WebAPIException::INVALID_STATE_ERR">
        <webidl>    const unsigned short INVALID_STATE_ERR = 11;</webidl>
        <descriptive>
            <brief>
 The object is in an invalid state.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="SYNTAX_ERR" value="12" id="::Tizen::WebAPIException::SYNTAX_ERR">
        <webidl>    const unsigned short SYNTAX_ERR = 12;</webidl>
        <descriptive>
            <brief>
 The string did not match the expected pattern.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="INVALID_MODIFICATION_ERR" value="13" id="::Tizen::WebAPIException::INVALID_MODIFICATION_ERR">
        <webidl>    const unsigned short INVALID_MODIFICATION_ERR = 13;</webidl>
        <descriptive>
            <brief>
 The object cannot be modified in this way.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="NAMESPACE_ERR" value="14" id="::Tizen::WebAPIException::NAMESPACE_ERR">
        <webidl>    const unsigned short NAMESPACE_ERR = 14;</webidl>
        <descriptive>
            <brief>
 The operation is not allowed by Namespaces in XML.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="INVALID_ACCESS_ERR" value="15" id="::Tizen::WebAPIException::INVALID_ACCESS_ERR">
        <webidl>    const unsigned short INVALID_ACCESS_ERR = 15;</webidl>
        <descriptive>
            <brief>
 The object does not support the operation or argument.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="VALIDATION_ERR" value="16" id="::Tizen::WebAPIException::VALIDATION_ERR">
        <webidl>    const unsigned short VALIDATION_ERR = 16;</webidl>
        <descriptive>
            <brief>
 The operation would cause the node to fail validation.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="TYPE_MISMATCH_ERR" value="17" id="::Tizen::WebAPIException::TYPE_MISMATCH_ERR">
        <webidl>    const unsigned short TYPE_MISMATCH_ERR = 17;</webidl>
        <descriptive>
            <brief>
 The type of the object does not match the expected type.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="SECURITY_ERR" value="18" id="::Tizen::WebAPIException::SECURITY_ERR">
        <webidl>    const unsigned short SECURITY_ERR = 18;</webidl>
        <descriptive>
            <brief>
 The operation is insecure.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="NETWORK_ERR" value="19" id="::Tizen::WebAPIException::NETWORK_ERR">
        <webidl>    const unsigned short NETWORK_ERR = 19;</webidl>
        <descriptive>
            <brief>
 A network error occurred.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="ABORT_ERR" value="20" id="::Tizen::WebAPIException::ABORT_ERR">
        <webidl>    const unsigned short ABORT_ERR = 20;</webidl>
        <descriptive>
            <brief>
 The operation has been aborted.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="URL_MISMATCH_ERR" value="21" id="::Tizen::WebAPIException::URL_MISMATCH_ERR">
        <webidl>    const unsigned short URL_MISMATCH_ERR = 21;</webidl>
        <descriptive>
            <brief>
 The given URL does not match another URL.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="QUOTA_EXCEEDED_ERR" value="22" id="::Tizen::WebAPIException::QUOTA_EXCEEDED_ERR">
        <webidl>    const unsigned short QUOTA_EXCEEDED_ERR = 22;</webidl>
        <descriptive>
            <brief>
 The quota has been exceeded.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="TIMEOUT_ERR" value="23" id="::Tizen::WebAPIException::TIMEOUT_ERR">
        <webidl>    const unsigned short TIMEOUT_ERR = 23;</webidl>
        <descriptive>
            <brief>
 The operation has timed out.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="INVALID_NODE_TYPE_ERR" value="24" id="::Tizen::WebAPIException::INVALID_NODE_TYPE_ERR">
        <webidl>    const unsigned short INVALID_NODE_TYPE_ERR = 24;</webidl>
        <descriptive>
            <brief>
 The supplied node is incorrect or has an incorrect ancestor for this operation.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
      <Const name="DATA_CLONE_ERR" value="25" id="::Tizen::WebAPIException::DATA_CLONE_ERR">
        <webidl>    const unsigned short DATA_CLONE_ERR = 25;</webidl>
        <descriptive>
            <brief>
 The object cannot be cloned.
            </brief>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Const>
    </Interface>
    <Interface name="WebAPIError" id="::Tizen::WebAPIError">
      <webidl>  [NoInterfaceObject]
  interface WebAPIError {
    readonly attribute unsigned short code;

    readonly attribute DOMString name;

    readonly attribute DOMString message;
  };</webidl>
      <descriptive>
          <brief>
 Generic error interface.
          </brief>
         <description>
          <p>
This interface will be used by the APIs in order to return them in the error callback of asynchronous methods.
          </p>
         </description>
          <version>
 2.0
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="code" id="::Tizen::WebAPIError::code">
        <webidl>    readonly attribute unsigned short code;</webidl>
        <descriptive>
            <brief>
 16-bit error code.
            </brief>
           <description>
            <p>
Possible values are defined in <a href="http://www.w3.org/TR/dom/#domexception">DOMException</a>.
            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="unsigned short"/>
      </Attribute>
      <Attribute readonly="readonly" name="name" id="::Tizen::WebAPIError::name">
        <webidl>    readonly attribute DOMString name;</webidl>
        <descriptive>
            <brief>
 An error type. The name attribute must return the value it had been initialized with.
            </brief>
           <description>
            <p>
This attribute can have one of the following values:
            </p>
            <ul>
              <li>
UnknownError - An unknown error has occurred.              </li>
              <li>
InvalidValuesError - The content of an object does not contain valid values.              </li>
              <li>
IOError - An error occurred in communication with the underlying implementation and so the requested method cannot be completed.              </li>
              <li>
ServiceNotAvailableError - The requested service is not available.              </li>
            </ul>
            <p>
For other possible values of this attribute, see the values defined in <a href="http://www.w3.org/TR/dom/#error-names-0">DOM error names</a>            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="message" id="::Tizen::WebAPIError::message">
        <webidl>    readonly attribute DOMString message;</webidl>
        <descriptive>
            <brief>
 An error message that describes the details of the error encountered.
            </brief>
           <description>
            <p>
This attribute is not intended to be used directly in the user interfaces
as it is mainly intended to be useful for developers rather than end users.
            </p>
           </description>
            <version>
 2.0
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
    </Interface>
    <Interface name="SuccessCallback" id="::Tizen::SuccessCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject]
  interface SuccessCallback {
    void onsuccess ();
  };</webidl>
      <descriptive>
          <brief>
 This interface is used in methods that do not require any return value in the success callback.
          </brief>
         <description>
          <p>
In case of successful execution of an asynchronous call, <em>SuccessCallback</em> or an API defined callback must be called immediately to notify the user.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code>     function onSuccess() {
         console.log(&quot;Application launched successfully&quot;);
     }
     tizen.application.launch('0pnxz8hbsr.MyFiles', onSuccess);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::Tizen::SuccessCallback::onsuccess">
        <webidl>    void onsuccess ();</webidl>
        <descriptive>
            <brief>
 Method invoked when the asynchronous call completes successfully.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
      </Operation>
    </Interface>
    <Interface name="ErrorCallback" id="::Tizen::ErrorCallback">
      <webidl>  [Callback=FunctionOnly, NoInterfaceObject]
  interface ErrorCallback {

    void onerror (<ref>WebAPIError</ref> error);
  };</webidl>
      <descriptive>
          <brief>
 This interface is used in methods that require only an error as an input parameter in the error callback.
          </brief>
         <description>
          <p>
If an invalid function (such as null) is passed to the API that accepts ErrorCallback,
it silently fails and there is no further action.
          </p>
         </description>
          <version>
 1.0
          </version>
          <Code>  // Define the error callback.
  function onerror(error) {
    console.log(error.message);
  }
  function onsuccess() {
      console.log(&quot;The application has launched successfully&quot;);
  }

  tizen.application.launch(&quot;targetApp0.main&quot;, onsuccess, onerror);
 </Code>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onerror" id="::Tizen::ErrorCallback::onerror">
        <webidl>    void onerror (<ref>WebAPIError</ref> error);</webidl>
        <descriptive>
            <brief>
 Method that is invoked when an error occurs.
            </brief>
            <version>
 1.0
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="error">
            <descriptive>
                <description><p>
 Generic error.
                </p></description>
            </descriptive>
            <Type name="WebAPIError"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="TVAudioControl" id="::TVAudioControl">
    <webidl>module TVAudioControl {
    enum AudioOutputMode {
        &quot;PCM&quot;,
        &quot;DOLBY&quot;,
        &quot;DTS&quot;,
        &quot;AAC&quot;
    };

    enum AudioBeepType {
        &quot;UP&quot;,
        &quot;DOWN&quot;,
        &quot;LEFT&quot;,
        &quot;RIGHT&quot;,
        &quot;PAGE_LEFT&quot;,
        &quot;PAGE_RIGHT&quot;,
        &quot;BACK&quot;,
        &quot;SELECT&quot;,
        &quot;CANCEL&quot;,
        &quot;WARNING&quot;,
        &quot;KEYPAD&quot;,
        &quot;KEYPAD_ENTER&quot;,
        &quot;KEYPAD_DEL&quot;,
        &quot;MOVE&quot;,
        &quot;PREPARING&quot;
    };

    [NoInterfaceObject] interface AudioControlManagerObject {
        readonly attribute <ref>AudioControlManager</ref> tvaudiocontrol;
    };
    <ref>Tizen</ref> implements <ref>AudioControlManagerObject</ref>;

    [NoInterfaceObject] interface AudioControlManager {

        void setMute(boolean mute) raises(<ref>WebAPIException</ref>);

        boolean isMute() raises(<ref>WebAPIException</ref>);

        void setVolume(unsigned short volume) raises(<ref>WebAPIException</ref>);

        void setVolumeUp() raises(<ref>WebAPIException</ref>);

        void setVolumeDown() raises(<ref>WebAPIException</ref>);

        unsigned short getVolume() raises(<ref>WebAPIException</ref>);

        void setVolumeChangeListener(<ref>VolumeChangeCallback</ref> callback) raises(<ref>WebAPIException</ref>);

        void unsetVolumeChangeListener() raises(<ref>WebAPIException</ref>);

        <ref>AudioOutputMode</ref> getOutputMode() raises(<ref>WebAPIException</ref>);

        void playSound(<ref>AudioBeepType</ref> type) raises(<ref>WebAPIException</ref>);

    };

    [Callback = FunctionOnly, NoInterfaceObject] interface VolumeChangeCallback {
        void onchanged(unsigned short volume);
    };

};</webidl>
    <descriptive>
        <brief>
        </brief>
       <description>
        <p>
This API provides the audio control features (such as volume and mute) on the TV associated device.
There will be a <em>tizen.tvaudiocontrol</em> object that allows access to the functionality of the TV Audio Control API.
        </p>
       </description>
        <version>
 2.3
        </version>
        <def-api-feature identifier="http://tizen.org/feature/tv.audio">
          <descriptive>
           <description>
            <p>
To guarantee the running of this application on a device with a TV audio control support, define the following requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
    </descriptive>
    <Enum name="AudioOutputMode" id="::TVAudioControl::AudioOutputMode">
      <webidl>    enum AudioOutputMode {
        &quot;PCM&quot;,
        &quot;DOLBY&quot;,
        &quot;DTS&quot;,
        &quot;AAC&quot;
    };</webidl>
      <descriptive>
          <brief>
  An enumerator to indicate the audio output mode.
          </brief>
         <description>
          <ul>
            <li>
 PCM - PCM(Pulse-code modulation) audio output mode            </li>
            <li>
 DOLBY - Dolby audio output mode            </li>
            <li>
 DTS - DTS(Digital Theater System) audio output mode            </li>
            <li>
 AAC - AAC(Advanced Audio Coding) audio output mode            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="PCM">
        <webidl>        &quot;PCM</webidl>
      </EnumValue>
      <EnumValue stringvalue="DOLBY">
        <webidl>        &quot;DOLBY</webidl>
      </EnumValue>
      <EnumValue stringvalue="DTS">
        <webidl>        &quot;DTS</webidl>
      </EnumValue>
      <EnumValue stringvalue="AAC">
        <webidl>        &quot;AAC</webidl>
      </EnumValue>
    </Enum>
    <Enum name="AudioBeepType" id="::TVAudioControl::AudioBeepType">
      <webidl>    enum AudioBeepType {
        &quot;UP&quot;,
        &quot;DOWN&quot;,
        &quot;LEFT&quot;,
        &quot;RIGHT&quot;,
        &quot;PAGE_LEFT&quot;,
        &quot;PAGE_RIGHT&quot;,
        &quot;BACK&quot;,
        &quot;SELECT&quot;,
        &quot;CANCEL&quot;,
        &quot;WARNING&quot;,
        &quot;KEYPAD&quot;,
        &quot;KEYPAD_ENTER&quot;,
        &quot;KEYPAD_DEL&quot;,
        &quot;MOVE&quot;,
        &quot;PREPARING&quot;
    };</webidl>
      <descriptive>
          <brief>
  An enumerator to indicate the beep type.
          </brief>
         <description>
          <ul>
            <li>
 UP - The UP sound            </li>
            <li>
 DOWN - The DOWN sound            </li>
            <li>
 LEFT - The LEFT sound            </li>
            <li>
 RIGHT - The RIGHT sound            </li>
            <li>
 PAGE_LEFT - The PAGE LEFT sound            </li>
            <li>
 PAGE_RIGHT - The PAGE RIGHT sound            </li>
            <li>
 BACK - The BACK sound            </li>
            <li>
 SELECT - The SELECT sound            </li>
            <li>
 CANCEL - The CANCEL sound            </li>
            <li>
 WARNING - The WARNING sound            </li>
            <li>
 KEYPAD - The KEYPAD sound            </li>
            <li>
 KEYPAD_ENTER - The KEYPAD ENTER sound            </li>
            <li>
 KEYPAD_DEL - The KEYPAD DEL sound            </li>
            <li>
 MOVE - The MOVE sound            </li>
            <li>
 PREPARING - The PREPARING sound            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="UP">
        <webidl>        &quot;UP</webidl>
      </EnumValue>
      <EnumValue stringvalue="DOWN">
        <webidl>        &quot;DOWN</webidl>
      </EnumValue>
      <EnumValue stringvalue="LEFT">
        <webidl>        &quot;LEFT</webidl>
      </EnumValue>
      <EnumValue stringvalue="RIGHT">
        <webidl>        &quot;RIGHT</webidl>
      </EnumValue>
      <EnumValue stringvalue="PAGE_LEFT">
        <webidl>        &quot;PAGE_LEFT</webidl>
      </EnumValue>
      <EnumValue stringvalue="PAGE_RIGHT">
        <webidl>        &quot;PAGE_RIGHT</webidl>
      </EnumValue>
      <EnumValue stringvalue="BACK">
        <webidl>        &quot;BACK</webidl>
      </EnumValue>
      <EnumValue stringvalue="SELECT">
        <webidl>        &quot;SELECT</webidl>
      </EnumValue>
      <EnumValue stringvalue="CANCEL">
        <webidl>        &quot;CANCEL</webidl>
      </EnumValue>
      <EnumValue stringvalue="WARNING">
        <webidl>        &quot;WARNING</webidl>
      </EnumValue>
      <EnumValue stringvalue="KEYPAD">
        <webidl>        &quot;KEYPAD</webidl>
      </EnumValue>
      <EnumValue stringvalue="KEYPAD_ENTER">
        <webidl>        &quot;KEYPAD_ENTER</webidl>
      </EnumValue>
      <EnumValue stringvalue="KEYPAD_DEL">
        <webidl>        &quot;KEYPAD_DEL</webidl>
      </EnumValue>
      <EnumValue stringvalue="MOVE">
        <webidl>        &quot;MOVE</webidl>
      </EnumValue>
      <EnumValue stringvalue="PREPARING">
        <webidl>        &quot;PREPARING</webidl>
      </EnumValue>
    </Enum>
    <Interface name="AudioControlManagerObject" id="::TVAudioControl::AudioControlManagerObject">
      <webidl>    [NoInterfaceObject] interface AudioControlManagerObject {
        readonly attribute <ref>AudioControlManager</ref> tvaudiocontrol;
    };</webidl>
      <descriptive>
          <brief>
 This interface defines what is instantiated by the <em>Tizen</em> object.
          </brief>
         <description>
          <p>
There will be a <em>tizen.tvaudiocontrol </em>object that allows the access to the
Audio Control API.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="tvaudiocontrol" id="::TVAudioControl::AudioControlManagerObject::tvaudiocontrol">
        <webidl>        readonly attribute <ref>AudioControlManager</ref> tvaudiocontrol;</webidl>
        <Type name="AudioControlManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="AudioControlManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>AudioControlManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="AudioControlManager" id="::TVAudioControl::AudioControlManager">
      <webidl>    [NoInterfaceObject] interface AudioControlManager {

        void setMute(boolean mute) raises(<ref>WebAPIException</ref>);

        boolean isMute() raises(<ref>WebAPIException</ref>);

        void setVolume(unsigned short volume) raises(<ref>WebAPIException</ref>);

        void setVolumeUp() raises(<ref>WebAPIException</ref>);

        void setVolumeDown() raises(<ref>WebAPIException</ref>);

        unsigned short getVolume() raises(<ref>WebAPIException</ref>);

        void setVolumeChangeListener(<ref>VolumeChangeCallback</ref> callback) raises(<ref>WebAPIException</ref>);

        void unsetVolumeChangeListener() raises(<ref>WebAPIException</ref>);

        <ref>AudioOutputMode</ref> getOutputMode() raises(<ref>WebAPIException</ref>);

        void playSound(<ref>AudioBeepType</ref> type) raises(<ref>WebAPIException</ref>);

    };</webidl>
      <descriptive>
          <brief>
 This interface provides access to the API funtionalities through the <em>tizen.tvaudiocontrol</em> interface.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="setMute" id="::TVAudioControl::AudioControlManager::setMute">
        <webidl>        void setMute(boolean mute) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Turns on or off the silent mode
            </brief>
           <description>
            <p>
Note that turning on mute mode does not change volume level but
it simply disables any sound. Turning off the mute will enable sound
with the volume level. If setVolumeUp or setVolumeDown functions
are used, then mute is disabled.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
            <Code> // Turn on the silent mode
 tizen.tvaudiocontrol.setMute(true);
 </Code>
            <Code> // Turn off the silent mode
 tizen.tvaudiocontrol.setMute(false);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="mute">
            <descriptive>
                <description><p>
 The mute state (true = turn on the silent mode, false = turn off the silent mode)
                </p></description>
            </descriptive>
            <Type type="boolean"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="isMute" id="::TVAudioControl::AudioControlManager::isMute">
        <webidl>        boolean isMute() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the mute state.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
            <Code> // Mute to turn off the sound
 tizen.tvaudiocontrol.setMute(true);

 // Check if it is mute or not
 if (tizen.tvaudiocontrol.isMute()) {
     console.log(&quot;At this moment, the sound output of this device is turned off.&quot;);
 } else {
     alert(&quot;It's not possible!&quot;);
 }
 </Code>
            <Code> // Checks if increasing the volume makes the silent mode turned off.

 // Mute to turn off the sound
 tizen.tvaudiocontrol.setMute(true);

 // By increasing the volume level, the mute state is changed to be off.
 tizen.tvaudiocontrol.setVolumeUp();

 // Check if it is mute or not
 if (tizen.tvaudiocontrol.isMute()) {
     alert(&quot;It's not possible! (API bug)&quot;);
 } else {
     console.log(&quot;setVolumeUp() turns off the silent mode.&quot;);
 }
 </Code>
        </descriptive>
        <Type type="boolean">
          <descriptive>
              <description><p>
 boolean The current mute state
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setVolume" id="::TVAudioControl::AudioControlManager::setVolume">
        <webidl>        void setVolume(unsigned short volume) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Changes the volume level.
            </brief>
           <description>
            <p>
The value of <em>volume</em> is allowed from 0 to 100. If an invalid value is passed, <em>InvalidValuesError</em> will occur.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
            <Code> // Sets the volume
 tizen.tvaudiocontrol.setVolume(10);

 try {
     tizen.tvaudiocontrol.setVolume(-1);
 } catch (e) {
     if (e.name === &quot;InvalidValuesError&quot;) {
         alert(&quot;The passed value value should be in the range of 0 to 100.&quot;);
     }
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="volume">
            <descriptive>
                <description><p>
 The volume (the available volume range is 0 ~100)
                </p></description>
            </descriptive>
            <Type type="unsigned short"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setVolumeUp" id="::TVAudioControl::AudioControlManager::setVolumeUp">
        <webidl>        void setVolumeUp() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Increases the volume by 1 level.
If it is called when the volume level is 100, it will be ignored
because the maximum volume level is 100. If mute is enabled,
then execution of this functions will disable it.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
            <Code> // Sets the volume
 tizen.tvaudiocontrol.setVolume(99);

 tizen.tvaudiocontrol.setVolumeUp();
 // Check if the current volume is 100 or not.
 if (tizen.tvaudiocontrol.getVolume() === 100) {
     alert(&quot;setVolumeUp() is successfully called.&quot;);
  }

 tizen.tvaudiocontrol.setVolumeUp();
 // Check if the volume level has been changed or not at the maximum volume level.
 if (tizen.tvaudiocontrol.getVolume() === 100) {
     alert(&quot;setVolumeUp() is successfully called.&quot;);
  }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setVolumeDown" id="::TVAudioControl::AudioControlManager::setVolumeDown">
        <webidl>        void setVolumeDown() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Decreases the volume by 1 level.
            </brief>
           <description>
            <p>
If it is called when the volume level is 0, it will be
ignored because the minimum volume level is 0. If mute is enabled,
then execution of this functions will disable it.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
            <Code> // Sets the volume
 tizen.tvaudiocontrol.setVolume(1);

 tizen.tvaudiocontrol.setVolumeDown();
 // Check if the current volume is 0 or not.
 if (tizen.tvaudiocontrol.getVolume() === 0) {
     alert(&quot;setVolumeDown() is successfully called.&quot;);
  }

 tizen.tvaudiocontrol.setVolumeDown();
 // Check if the volume level has been changed or not at the minimum volume level.
 if (tizen.tvaudiocontrol.getVolume() === 0) {
     alert(&quot;setVolumeDown() is successfully called.&quot;);
  }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getVolume" id="::TVAudioControl::AudioControlManager::getVolume">
        <webidl>        unsigned short getVolume() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the current volume level.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
        </descriptive>
        <Type type="unsigned short">
          <descriptive>
              <description><p>
 unsigned short The current volume (the volume range is 0 ~ 100)
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setVolumeChangeListener" id="::TVAudioControl::AudioControlManager::setVolumeChangeListener">
        <webidl>        void setVolumeChangeListener(<ref>VolumeChangeCallback</ref> callback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Registers a volume change callback for getting notified when TV volume has been changed.
            </brief>
           <description>
            <p>
Note that this method overwrites the previously registered listener.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
            <Code> var expectedVolumeLevel = 50;

 function onVolumeChanged(volume) {
     if (volume === expectedVolumeLevel) {
          console.log(&quot;Succeeded! The volume level has been changed to &quot;+ volume+&quot;. &quot;);
     } else {
          alert(&quot;Failed. The volume level has been changed to &quot;+ volume+&quot; . We expect 50.&quot;);
     }
 }

 tizen.tvaudiocontrol.setVolume(0);

 tizen.tvaudiocontrol.setVolumeChangeListener(onVolumeChanged);

 tizen.tvaudiocontrol.setVolume(expectedVolumeLevel);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="callback">
            <descriptive>
                <description><p>
 The method to invoke when the volume has been changed. It will not be triggered when the silent mode is changed.
                </p></description>
            </descriptive>
            <Type name="VolumeChangeCallback"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="unsetVolumeChangeListener" id="::TVAudioControl::AudioControlManager::unsetVolumeChangeListener">
        <webidl>        void unsetVolumeChangeListener() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Unregisters the volume change callback for detecting the volume changes.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
            <Code> var expectedVolumeLevel = 50;

 function onVolumeChanged(volume) {
     alert(&quot;This function must not be called.&quot;);
 }

 tizen.tvaudiocontrol.setVolume(0);

 tizen.tvaudiocontrol.setVolumeChangeListener(onVolumeChanged);
 tizen.tvaudiocontrol.unsetVolumeChangeListener();

 tizen.tvaudiocontrol.setVolume(expectedVolumeLevel);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getOutputMode" id="::TVAudioControl::AudioControlManager::getOutputMode">
        <webidl>        <ref>AudioOutputMode</ref> getOutputMode() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the current audio output mode.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
        </descriptive>
        <Type name="AudioOutputMode">
          <descriptive>
              <description><p>
 AudioOutputMode The current audio output mode
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="playSound" id="::TVAudioControl::AudioControlManager::playSound">
        <webidl>        void playSound(<ref>AudioBeepType</ref> type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Plays the sound of a specific beep.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.audio
            </privilege>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="type">
            <descriptive>
                <description><p>
 The beep type to play
                </p></description>
            </descriptive>
            <Type name="AudioBeepType"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if the input parameter is not compatible with the expected type.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="VolumeChangeCallback" id="::TVAudioControl::VolumeChangeCallback">
      <webidl>    [Callback = FunctionOnly, NoInterfaceObject] interface VolumeChangeCallback {
        void onchanged(unsigned short volume);
    };</webidl>
      <descriptive>
          <brief>
 This interface defines a volume change callback for getting notified information about the volume changes.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onchanged" id="::TVAudioControl::VolumeChangeCallback::onchanged">
        <webidl>        void onchanged(unsigned short volume);</webidl>
        <descriptive>
            <brief>
 The method invoked when the volume has been changed.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="volume">
            <descriptive>
                <description><p>
 The changed volume
                </p></description>
            </descriptive>
            <Type type="unsigned short"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="TVChannel" id="::TVChannel">
    <webidl>module TVChannel {

    enum TuneMode {
        &quot;ALL&quot;,
        &quot;DIGITAL&quot;,
        &quot;ANALOG&quot;,
        &quot;FAVORITE&quot;
    };

    [NoInterfaceObject] interface TVChannelManager {
        readonly attribute <ref>ChannelManager</ref> tvchannel;
    };
    <ref>Tizen</ref> implements <ref>TVChannelManager</ref>;

    [NoInterfaceObject] interface ChannelManager {

        void tune(<ref>TuneOption</ref> tuneOption,
                  <ref>TuneCallback</ref> successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback,
                  optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void tuneUp(<ref>TuneCallback</ref> successCallback,
                    optional <ref>ErrorCallback</ref>? errorCallback,
                    optional <ref>TuneMode</ref>? tuneMode,
                    optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void tuneDown(<ref>TuneCallback</ref> successCallback,
                      optional <ref>ErrorCallback</ref>? errorCallback,
                      optional <ref>TuneMode</ref>? tuneMode,
                      optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void findChannel(long major,
                         long minor,
                         <ref>FindChannelSuccessCallback</ref> successCallback,
                         optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

        void getChannelList(<ref>FindChannelSuccessCallback</ref> successCallback,
                            optional <ref>ErrorCallback</ref>? errorCallback,
                            optional <ref>TuneMode</ref>? mode,
                            optional long? nStart,
                            optional long? number) raises(<ref>WebAPIException</ref>);

        <ref>ChannelInfo</ref> getCurrentChannel(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void getProgramList(<ref>ChannelInfo</ref> channelInfo,
                            <ref>TZDate</ref> startTime,
                            <ref>ProgramListSuccessCallback</ref> successCallback,
                            optional <ref>ErrorCallback</ref>? errorCallback,
                            optional unsigned long? duration) raises(<ref>WebAPIException</ref>);

        <ref>ProgramInfo</ref>? getCurrentProgram(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        long addChannelChangeListener(<ref>ChannelChangeCallback</ref> callback,
                                       optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void removeChannelChangeListener(long channelListenerId) raises(<ref>WebAPIException</ref>);

    };

    [Callback = FunctionOnly, NoInterfaceObject] interface ProgramListSuccessCallback {
        void onsuccess(<ref>ProgramInfo</ref>[] programInfos);
    };

    [Callback = FunctionOnly, NoInterfaceObject] interface FindChannelSuccessCallback {
        void onsuccess(<ref>ChannelInfo</ref>[] channelInfos);
    };

    [Callback = FunctionOnly, NoInterfaceObject] interface ChannelChangeCallback {
        void onchanged(<ref>ChannelInfo</ref> channelInfo, <ref>WindowType</ref> type);
    };

    [Callback, NoInterfaceObject] interface TuneCallback {
        void onsuccess(<ref>ChannelInfo</ref> channel, <ref>WindowType</ref> type);

        void onnosignal();

        void onprograminforeceived(<ref>ProgramInfo</ref> program, <ref>WindowType</ref> type);
    };

    dictionary TuneOption {
        long? major;

        long? minor;

        long? sourceID;

        long? programNumber;

        long? transportStreamID;

        long? ptc;

        long? originalNetworkID;
    };

    [NoInterfaceObject] interface ChannelInfo {
        readonly attribute long major;

        readonly attribute long minor;

        readonly attribute DOMString channelName;

        readonly attribute long programNumber;

        readonly attribute long ptc;

        readonly attribute long lcn;

        readonly attribute long sourceID;

        readonly attribute long transportStreamID;

        readonly attribute long originalNetworkID;

        readonly attribute DOMString serviceName;
    };

    [NoInterfaceObject] interface ProgramInfo {
        readonly attribute DOMString title;

        readonly attribute <ref>TZDate</ref> startTime;

        readonly attribute long duration;

        readonly attribute DOMString? detailedDescription;

        readonly attribute DOMString? language;

        readonly attribute DOMString? rating;
    };

};</webidl>
    <descriptive>
        <brief>
        </brief>
       <description>
        <p>
The TV Channel API provides the control of channel change and
a way to get information about the television program for supporting an Electronic Program Guide(EPG) or Interactive Program Guide(IPG).
Using this API, TV watchers can get continuously updated EPG information about the current and upcoming TV programs on all available channels.
        </p>
        <p>
Regarding tuning operation, there are some common behaviors.
        </p>
        <ul>
          <li>
<var>errorCallback</var> will be invoked if there is no channel corresponding to the request          </li>
        </ul>
       </description>
        <version>
 2.3
        </version>
        <def-api-feature identifier="http://tizen.org/feature/tv.tuner">
          <descriptive>
           <description>
            <p>
To guarantee the running of this application on a device with a tuner, define the following requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
    </descriptive>
    <Enum name="TuneMode" id="::TVChannel::TuneMode">
      <webidl>    enum TuneMode {
        &quot;ALL&quot;,
        &quot;DIGITAL&quot;,
        &quot;ANALOG&quot;,
        &quot;FAVORITE&quot;
    };</webidl>
      <descriptive>
          <brief>
 An enumerator to indicate the tune mode.
          </brief>
         <description>
          <p>
It determines the scope of channel navigation.
          </p>
          <ul>
            <li>
 ALL - The whole channels             </li>
            <li>
 DIGITAL - Only digital channels            </li>
            <li>
 ANALOG - Only analog channels            </li>
            <li>
 FAVORITE - Channels set as preferred by TV watchers            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="ALL">
        <webidl>        &quot;ALL</webidl>
      </EnumValue>
      <EnumValue stringvalue="DIGITAL">
        <webidl>        &quot;DIGITAL</webidl>
      </EnumValue>
      <EnumValue stringvalue="ANALOG">
        <webidl>        &quot;ANALOG</webidl>
      </EnumValue>
      <EnumValue stringvalue="FAVORITE">
        <webidl>        &quot;FAVORITE</webidl>
      </EnumValue>
    </Enum>
    <Interface name="TVChannelManager" id="::TVChannel::TVChannelManager">
      <webidl>    [NoInterfaceObject] interface TVChannelManager {
        readonly attribute <ref>ChannelManager</ref> tvchannel;
    };</webidl>
      <descriptive>
          <brief>
 This interface defines what is instantiated by the <em>tizen</em> object.
          </brief>
         <description>
          <p>
There will be a <em>tizen.tvchannel</em> object that allows access to the
functionality of the channel module.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="tvchannel" id="::TVChannel::TVChannelManager::tvchannel">
        <webidl>        readonly attribute <ref>ChannelManager</ref> tvchannel;</webidl>
        <Type name="ChannelManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="TVChannelManager">
      <webidl>    <ref>Tizen</ref> implements <ref>TVChannelManager</ref>;</webidl>
    </Implements>
    <Interface name="ChannelManager" id="::TVChannel::ChannelManager">
      <webidl>    [NoInterfaceObject] interface ChannelManager {

        void tune(<ref>TuneOption</ref> tuneOption,
                  <ref>TuneCallback</ref> successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback,
                  optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void tuneUp(<ref>TuneCallback</ref> successCallback,
                    optional <ref>ErrorCallback</ref>? errorCallback,
                    optional <ref>TuneMode</ref>? tuneMode,
                    optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void tuneDown(<ref>TuneCallback</ref> successCallback,
                      optional <ref>ErrorCallback</ref>? errorCallback,
                      optional <ref>TuneMode</ref>? tuneMode,
                      optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void findChannel(long major,
                         long minor,
                         <ref>FindChannelSuccessCallback</ref> successCallback,
                         optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

        void getChannelList(<ref>FindChannelSuccessCallback</ref> successCallback,
                            optional <ref>ErrorCallback</ref>? errorCallback,
                            optional <ref>TuneMode</ref>? mode,
                            optional long? nStart,
                            optional long? number) raises(<ref>WebAPIException</ref>);

        <ref>ChannelInfo</ref> getCurrentChannel(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void getProgramList(<ref>ChannelInfo</ref> channelInfo,
                            <ref>TZDate</ref> startTime,
                            <ref>ProgramListSuccessCallback</ref> successCallback,
                            optional <ref>ErrorCallback</ref>? errorCallback,
                            optional unsigned long? duration) raises(<ref>WebAPIException</ref>);

        <ref>ProgramInfo</ref>? getCurrentProgram(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        long addChannelChangeListener(<ref>ChannelChangeCallback</ref> callback,
                                       optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void removeChannelChangeListener(long channelListenerId) raises(<ref>WebAPIException</ref>);

    };</webidl>
      <descriptive>
          <brief>
 This interface provides access to the API functionalities through the <em>tizen.tvchannel</em> interface.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="tune" id="::TVChannel::ChannelManager::tune">
        <webidl>        void tune(<ref>TuneOption</ref> tuneOption,
                  <ref>TuneCallback</ref> successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback,
                  optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Tunes the specified channel.
            </brief>
           <description>
            <p>
If there are more than one channel with the major and minor, the lowest channel in all possible channels will be switched to.
            </p>
            <p>
The <em>ErrorCallback</em> will be launched in the following situations:
            </p>
            <ul>
              <li>
 NotFoundError - Failed to find a requested channel              </li>
              <li>
 UnknownError - Failed to set the selected channel              </li>
              <li>
 UnknownError - onprograminforeceived for other tune              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> var tuneCB = {
    onsuccess: function() {
        console.log(&quot;Tune() is successfully done. And there is a signal.&quot;);
    }
    onnosignal: function() {
        console.log(&quot;Tune() is successfully done. But there is no signal.&quot;);
    }
 };

 function channelCB(channels) {
     console.log(&quot;getting channels is successful. &quot; + channels.length + &quot; channels are retreived.&quot;);
     if (channels.length === 0 ) {
         console.log(&quot;There is no found channel.&quot;);
         return;
     }
     try {
         tizen.tvchannel.tune({major: channels[0].major}, tuneCB);
     } catch(error) {
         console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
     }
 }

 function errorCB(error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }

 try {
     // requests to get information about 10 channels.
     tizen.tvchannel.getChannelList(channelCB, errorCB, &quot;ALL&quot;, 0, 10);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="tuneOption">
            <descriptive>
                <description><p>
 The tuning option. By default, this attribute is set to <b>null</b>.
                </p></description>
            </descriptive>
            <Type name="TuneOption"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when the tunning operation is completed successfully.
                </p></description>
            </descriptive>
            <Type name="TuneCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
  The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="tuneUp" id="::TVChannel::ChannelManager::tuneUp">
        <webidl>        void tuneUp(<ref>TuneCallback</ref> successCallback,
                    optional <ref>ErrorCallback</ref>? errorCallback,
                    optional <ref>TuneMode</ref>? tuneMode,
                    optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Changes channel up.
            </brief>
           <description>
            <p>
When you call this api on the highest channel, the lowest channel would be tuned.
            </p>
            <p>
The <em>ErrorCallback</em> will be launched in the following situations:
            </p>
            <ul>
              <li>
 NotFoundError - Failed to find the next higher channel (e.g. When there is no channels in <var>favorites</var> list, you call <var>tuneUp()</var> with <var>'FAVORITE'</var> tune mode.)               </li>
              <li>
 UnknownError - Failed to change to the next higher channel              </li>
              <li>
 UnknownError - onprograminforeceived for other tune              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> var tuneCB = {
    onsuccess: function() {
        console.log(&quot;tuneUp() is successfully done. And there is a signal.&quot;);
    }
    onnosignal: function() {
        console.log(&quot;tuneUp() is successfully done. But there is no signal.&quot;);
    }
 };

 try {
     tizen.tvchannel.tuneUp(tuneCB, null, &quot;ALL&quot;);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when the tunning operation is completed successfully.
                </p></description>
            </descriptive>
            <Type name="TuneCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="tuneMode">
            <descriptive>
                <description><p>
 The tuning navigation mode. By default, this attribute is set to <var>ALL</var>.
                </p></description>
            </descriptive>
            <Type name="TuneMode" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="tuneDown" id="::TVChannel::ChannelManager::tuneDown">
        <webidl>        void tuneDown(<ref>TuneCallback</ref> successCallback,
                      optional <ref>ErrorCallback</ref>? errorCallback,
                      optional <ref>TuneMode</ref>? tuneMode,
                      optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Changes channel down.
            </brief>
           <description>
            <p>
When you call this api on the lowest channel, the highest channel would be tuned.
            </p>
            <p>
The <em>ErrorCallback</em> will be launched in the following situations:
            </p>
            <ul>
              <li>
 NotFoundError - Failed to find the next lower channel (e.g. When there is no channels in <var>favorites</var> list, you call <var>tuneDown()</var> with <var>'FAVORITE'</var> tune mode.)               </li>
              <li>
 UnknownError - Failed to change to the next lower channel              </li>
              <li>
 UnknownError - onprograminforeceived for other tune              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> var tuneCB = {
    onsuccess: function() {
        console.log(&quot;tuneDown() is successfully done. And there is a signal.&quot;);
    }
    onnosignal: function() {
        console.log(&quot;tuneDown() is successfully done. But there is no signal.&quot;);
    }
 };

 try {
     // change the channel down according to 'ALL' navigation mode.
     tizen.tvchannel.tuneDown(tuneCB);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when the tunning operation is completed successfully.
                </p></description>
            </descriptive>
            <Type name="TuneCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
  The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="tuneMode">
            <descriptive>
                <description><p>
 The tuning navigation mode. By default, this attribute is set to <var>ALL</var>.
                </p></description>
            </descriptive>
            <Type name="TuneMode" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="findChannel" id="::TVChannel::ChannelManager::findChannel">
        <webidl>        void findChannel(long major,
                         long minor,
                         <ref>FindChannelSuccessCallback</ref> successCallback,
                         optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Retrieves information about all available channels.
            </brief>
           <description>
            <p>
The <em>ErrorCallback</em> will be launched in the following situations:
            </p>
            <ul>
              <li>
 NotFoundError - Failed to find the channel (e.g. call <var>findChannel()</var> with invalid major and minor values(e.g. non-existing channel information))              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> function successCB(channels) {
     console.log(&quot;findChannel() is successfully done. Totally &quot; + channels.length + &quot; channels are found.&quot;);
     for (var i = 0; i &#60; channels.length; i++) {
         console.log(&quot;----- Channel [&quot; + i + &quot;] -----&quot;);
         console.log(&quot;Major channel = &quot; + channels[i].major);
         console.log(&quot;Minor channel = &quot; + channels[i].minor);
         console.log(&quot;Channel Name = &quot; + channels[i].channelName);
         console.log(&quot;Program Number = &quot; + channels[i].programNumber);
         // you can get other attributes provided in ChannelInfo
     }
 }

 try {
     tizen.tvchannel.findChannel(9, 0, successCB);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="major">
            <descriptive>
                <description><p>
 The major channel number
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
          <Argument name="minor">
            <descriptive>
                <description><p>
 The minor channel number
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when the channel searching is done successfully.
                </p></description>
            </descriptive>
            <Type name="FindChannelSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getChannelList" id="::TVChannel::ChannelManager::getChannelList">
        <webidl>        void getChannelList(<ref>FindChannelSuccessCallback</ref> successCallback,
                            optional <ref>ErrorCallback</ref>? errorCallback,
                            optional <ref>TuneMode</ref>? mode,
                            optional long? nStart,
                            optional long? number) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the TV channel list.
            </brief>
           <description>
            <p>
If this method is invoked without <var>number</var> parameter, all available channel informations will be retrieved.
            </p>
            <p>
If you call <em>getChannelList()</em> with <var>'FAVORITE'</var> tune navigation mode,
            </p>
            <ul>
              <li>
 All favorites channels will be retreived only if you have added <var>favorites</var> using your remote control.              </li>
              <li>
 Empty array will be returned if there is no <var>favorites</var> channel on a Tizen device.              </li>
            </ul>
            <p>
The <em>ErrorCallback</em> will be launched in the following situations:
            </p>
            <ul>
              <li>
 NotFoundError - Failed to find the channels              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> function successCB(channels) {
     console.log(&quot;getChannelList() is successfully done. Totally &quot; + channels.length + &quot; channels are retrieved.&quot;);
     for (var i = 0; i &#60; channels.length; i++) {
         console.log(&quot;----- Channel [&quot; + i + &quot;] -----&quot;);
         console.log(&quot;Major channel = &quot; + channels[i].major);
         console.log(&quot;Minor channel = &quot; + channels[i].minor);
         console.log(&quot;Channel Name = &quot; + channels[i].channelName);
         console.log(&quot;Program Number = &quot; + channels[i].programNumber);
         // you can get other attributes provided in ChannelInfo
     }
 }

 try {
     // gets 10 channel information among all channels
     tizen.tvchannel.getChannelList(successCB, null, &quot;ALL&quot;, 0, 10);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
            <Code> function successCB(channels) {
     console.log(&quot;getChannelList() is successfully done. Totally &quot; + channels.length + &quot; channels are retrieved.&quot;);
     for (var i = 0; i &#60; channels.length; i++) {
         console.log(&quot;----- Channel [&quot; + i + &quot;] -----&quot;);
         console.log(&quot;Major channel = &quot; + channels[i].major);
         console.log(&quot;Minor channel = &quot; + channels[i].minor);
         console.log(&quot;Channel Name = &quot; + channels[i].channelName);
         console.log(&quot;Program Number = &quot; + channels[i].programNumber);
         // you can get other attributes provided in ChannelInfo
     }
 }

 try {
     // gets one digital channel.
     tizen.tvchannel.getChannelList(successCB, null, &quot;DIGITAL&quot;, 0, 1);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when a list of tv channels is retrieved successfully.
                </p></description>
            </descriptive>
            <Type name="FindChannelSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="mode">
            <descriptive>
                <description><p>
 The channel navigation mode. By default, this attribute is set to <var>ALL</var>.
                </p></description>
            </descriptive>
            <Type name="TuneMode" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="nStart">
            <descriptive>
                <description><p>
 The starting index. By default, this attribute is set to <var>0</var>.
<br/> If <var>nStart</var> is a negative number, InvalidValuesError will occur.
                </p></description>
            </descriptive>
            <Type type="long" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="number">
            <descriptive>
                <description><p>
 The number of the channel informations to retrieve. Without <var>number</var>, all vailable channel informations will be retrieved.
<br/> If <var>number</var> is a negative number, InvalidValuesError will occur.
                </p></description>
            </descriptive>
            <Type type="long" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getCurrentChannel" id="::TVChannel::ChannelManager::getCurrentChannel">
        <webidl>        <ref>ChannelInfo</ref> getCurrentChannel(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets information about the current channel.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> try {
     var channel = tizen.tvchannel.getCurrentChannel();
     console.log(&quot;The current channel name is &quot;  + channel.channelName);
     console.log(&quot;The current channel's major number is &quot;  + channel.major);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type name="ChannelInfo">
          <descriptive>
              <description><p>
 ChannelInfo the current channel information
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getProgramList" id="::TVChannel::ChannelManager::getProgramList">
        <webidl>        void getProgramList(<ref>ChannelInfo</ref> channelInfo,
                            <ref>TZDate</ref> startTime,
                            <ref>ProgramListSuccessCallback</ref> successCallback,
                            optional <ref>ErrorCallback</ref>? errorCallback,
                            optional unsigned long? duration) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets a list of programs for a specific channel within a specified time duration.
If this method is invoked without the <var>duration</var> parameter, all available program informations are retrieved.
            </brief>
            <remark>
 If a specified channel has never been tuned before, you cannot get a information about the programs. It will retrieve be empty array through ProgramListSuccessCallback.
            </remark>
           <description>
            <p>
The <em>ErrorCallback</em> will be launched in the following situations:
            </p>
            <ul>
              <li>
 NotFoundError - Failed to retrieve any information about the TV program              </li>
            </ul>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> function programListCB(programInfos) {
     console.log(&quot;getting all available programs is successfully retrieved.&quot;);
     for (var i = 0; i &#60; programInfos.length; i++) {
         console.log(&quot;--------------- Program &quot; + i + &quot; ---------------&quot;);
         console.log(&quot;title = &quot; + programInfos[i].title);
         console.log(&quot;duration = &quot; + programInfos[i].duration);
         // you can get other attributes in the retrieved ProgramInfo objects.
     }
 }

 try {
     var channel = tizen.tvchannel.getCurrentChannel();
     // Get all available program information
     tizen.tvchannel.getProgramList(channel, tizen.time.getCurrentDateTime(), programListCB);
 } catch (error) {
     console.log(error.name);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="channelInfo">
            <descriptive>
                <description><p>
 The channel
                </p></description>
            </descriptive>
            <Type name="ChannelInfo"/>
          </Argument>
          <Argument name="startTime">
            <descriptive>
                <description><p>
 The starting time to search programs.
                </p></description>
            </descriptive>
            <Type name="TZDate"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when a list of programs is retrieved successfully.
                </p></description>
            </descriptive>
            <Type name="ProgramListSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
  The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="duration">
            <descriptive>
                <description><p>
 The duration to search programs.(unit: hour) Without <var>duration</var> value, all available program informations are retrieved.
                </p></description>
            </descriptive>
            <Type type="unsigned long" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getCurrentProgram" id="::TVChannel::ChannelManager::getCurrentProgram">
        <webidl>        <ref>ProgramInfo</ref>? getCurrentProgram(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets information about the current television program.
            </brief>
           <description>
            <p>
If there is no TV program data grabbed from broadcaster, it will return <var>null</var>.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> try {
     var program = tizen.tvchannel.getCurrentProgram();
     console.log(&quot;The current program is titled &quot;  + program.title);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type name="ProgramInfo" nullable="nullable">
          <descriptive>
              <description><p>
 ProgramInfo the information of television program
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="addChannelChangeListener" id="::TVChannel::ChannelManager::addChannelChangeListener">
        <webidl>        long addChannelChangeListener(<ref>ChannelChangeCallback</ref> callback,
                                       optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Adds a channel change listener for getting notified about the channel changes.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
            <Code> function channelChangeCB(channelInfo, type) {
     console.log(&quot;Switched to the new channel (major = &quot; + channelInfo.major + &quot;, minor = &quot; + channelInfo.minor + &quot;, channel name = &quot; + channelInfo.channelName);
 }

 try {
     var channelListenerID = tizen.tvchannel.addChannelChangeListener(channelChangeCB);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="long">
          <descriptive>
              <description><p>
 long The identifier to clear the watch subscription for channel changes.
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="callback">
            <descriptive>
                <description><p>
 The method to invoke when the channel has been changed
                </p></description>
            </descriptive>
            <Type name="ChannelChangeCallback"/>
          </Argument>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
                <description><p>
 with error type UnknownError, if it fails to create a listener or subscribe to a signal when channel changes.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removeChannelChangeListener" id="::TVChannel::ChannelManager::removeChannelChangeListener">
        <webidl>        void removeChannelChangeListener(long channelListenerId) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes the listener to stop receiving notifications for the channel changes.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.channel
            </privilege>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="channelListenerId">
            <descriptive>
                <description><p>
 The identifier of the listener for channel changes
                </p></description>
            </descriptive>
            <Type type="long"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type NotSupportedError, if this feature is not supported.
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="ProgramListSuccessCallback" id="::TVChannel::ProgramListSuccessCallback">
      <webidl>    [Callback = FunctionOnly, NoInterfaceObject] interface ProgramListSuccessCallback {
        void onsuccess(<ref>ProgramInfo</ref>[] programInfos);
    };</webidl>
      <descriptive>
          <brief>
 This interface invokes the success callback that is invoked when the list of TV program informations is successfully retrieved.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::TVChannel::ProgramListSuccessCallback::onsuccess">
        <webidl>        void onsuccess(<ref>ProgramInfo</ref>[] programInfos);</webidl>
        <descriptive>
            <brief>
 The method invoked when the list of TV program informations is retrieved.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="programInfos">
            <descriptive>
                <description><p>
 A list of TV program informations of a channel
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="ProgramInfo"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="FindChannelSuccessCallback" id="::TVChannel::FindChannelSuccessCallback">
      <webidl>    [Callback = FunctionOnly, NoInterfaceObject] interface FindChannelSuccessCallback {
        void onsuccess(<ref>ChannelInfo</ref>[] channelInfos);
    };</webidl>
      <descriptive>
          <brief>
 The interface invokes the success callback that is invoked when all available channels are searched.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::TVChannel::FindChannelSuccessCallback::onsuccess">
        <webidl>        void onsuccess(<ref>ChannelInfo</ref>[] channelInfos);</webidl>
        <descriptive>
            <brief>
 Method invoked when all channels are found.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="channelInfos">
            <descriptive>
                <description><p>
 A list of channel Informations
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="ChannelInfo"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="ChannelChangeCallback" id="::TVChannel::ChannelChangeCallback">
      <webidl>    [Callback = FunctionOnly, NoInterfaceObject] interface ChannelChangeCallback {
        void onchanged(<ref>ChannelInfo</ref> channelInfo, <ref>WindowType</ref> type);
    };</webidl>
      <descriptive>
          <brief>
 The interface defines a channel change callback for getting notified information about the channel changes.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onchanged" id="::TVChannel::ChannelChangeCallback::onchanged">
        <webidl>        void onchanged(<ref>ChannelInfo</ref> channelInfo, <ref>WindowType</ref> type);</webidl>
        <descriptive>
            <brief>
 Method invoked when the channel has been changed.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="channelInfo">
            <descriptive>
                <description><p>
 The switched channel information
                </p></description>
            </descriptive>
            <Type name="ChannelInfo"/>
          </Argument>
          <Argument name="type">
            <descriptive>
                <description><p>
 The window type
                </p></description>
            </descriptive>
            <Type name="WindowType"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="TuneCallback" id="::TVChannel::TuneCallback">
      <webidl>    [Callback, NoInterfaceObject] interface TuneCallback {
        void onsuccess(<ref>ChannelInfo</ref> channel, <ref>WindowType</ref> type);

        void onnosignal();

        void onprograminforeceived(<ref>ProgramInfo</ref> program, <ref>WindowType</ref> type);
    };</webidl>
      <descriptive>
          <brief>
 This interface invokes the callback that is invoked when the tuning has been completed.
          </brief>
         <description>
          <p>
This callback interface specifies two methods:
          </p>
          <ul>
            <li>
 <em>onsuccess()</em> - Invoked when the tuning operation has been successfully done and there is a TV signal.            </li>
            <li>
 <em>onnosignal()</em> - Invoked when the tuning operation has been successfully done but there is no signal on the switched channel.            </li>
            <li>
 <em>onprograminforeceived()</em> - Invoked when information about the current program is available after the tune operation.            </li>
          </ul>
          <p>
All these callback methods can be invoked by <b>tizen.tvchannel.tune(), tuneUp() or tuneDown()</b>.
          </p>
          <p>
If there is a TV signal, <b>onsuccess()</b> will be invoked first, and then <b>onprograminforeceived()</b> will be invoked
if information about TV program exists.
But on the other hand, if there is no TV signal, <b>onnosignal()</b> will be invoked.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::TVChannel::TuneCallback::onsuccess">
        <webidl>        void onsuccess(<ref>ChannelInfo</ref> channel, <ref>WindowType</ref> type);</webidl>
        <descriptive>
            <brief>
 Method invoked when the tuning is successfully done.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="channel">
            <descriptive>
                <description><p>
 The tuned channel information
                </p></description>
            </descriptive>
            <Type name="ChannelInfo"/>
          </Argument>
          <Argument name="type">
            <descriptive>
                <description><p>
 The window type
                </p></description>
            </descriptive>
            <Type name="WindowType"/>
          </Argument>
        </ArgumentList>
      </Operation>
      <Operation name="onnosignal" id="::TVChannel::TuneCallback::onnosignal">
        <webidl>        void onnosignal();</webidl>
        <descriptive>
            <brief>
 Method invoked when the tuning is successfully done but there is no signal on the switched channel.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList/>
      </Operation>
      <Operation name="onprograminforeceived" id="::TVChannel::TuneCallback::onprograminforeceived">
        <webidl>        void onprograminforeceived(<ref>ProgramInfo</ref> program, <ref>WindowType</ref> type);</webidl>
        <descriptive>
            <brief>
 Method invoked when information about the current program is available after the tune operation
            </brief>
           <description>
            <p>
If there is no TV program data grabbed from broadcaster, <var>onprograminreceived</var> won't be invoked.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="program">
            <descriptive>
                <description><p>
 the information about program on offer from The tuned channel
                </p></description>
            </descriptive>
            <Type name="ProgramInfo"/>
          </Argument>
          <Argument name="type">
            <descriptive>
                <description><p>
 The window type
                </p></description>
            </descriptive>
            <Type name="WindowType"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Dictionary name="TuneOption" id="::TVChannel::TuneOption">
      <webidl>    dictionary TuneOption {
        long? major;

        long? minor;

        long? sourceID;

        long? programNumber;

        long? transportStreamID;

        long? ptc;

        long? originalNetworkID;
    };</webidl>
      <descriptive>
          <brief>
 This dictionary specifies the tunning option.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <DictionaryMember name="major" id="::TVChannel::TuneOption::major">
        <webidl>        long? major;</webidl>
        <descriptive>
            <brief>
 The major channel number
<br/>The first number in a two-part number used to identify a virtual channel.
Each virtual channel carries one service, such as a television program.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </DictionaryMember>
      <DictionaryMember name="minor" id="::TVChannel::TuneOption::minor">
        <webidl>        long? minor;</webidl>
        <descriptive>
            <brief>
 The minor channel number
<br/>The second number in a two-part number used to identify a virtual channel.
The minor number changes for each different service that is or will be present in a DTV transport stream.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </DictionaryMember>
      <DictionaryMember name="sourceID" id="::TVChannel::TuneOption::sourceID">
        <webidl>        long? sourceID;</webidl>
        <descriptive>
            <brief>
 Source ID
            </brief>
           <description>
            <p>
It is a number that uniquely identifies a source of scheduled programming.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </DictionaryMember>
      <DictionaryMember name="programNumber" id="::TVChannel::TuneOption::programNumber">
        <webidl>        long? programNumber;</webidl>
        <descriptive>
            <brief>
 Program number
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </DictionaryMember>
      <DictionaryMember name="transportStreamID" id="::TVChannel::TuneOption::transportStreamID">
        <webidl>        long? transportStreamID;</webidl>
        <descriptive>
            <brief>
 TSID (Transport Stream ID or transmission signal ID)
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </DictionaryMember>
      <DictionaryMember name="ptc" id="::TVChannel::TuneOption::ptc">
        <webidl>        long? ptc;</webidl>
        <descriptive>
            <brief>
 PTC(Physical Transmission Channel) number
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </DictionaryMember>
      <DictionaryMember name="originalNetworkID" id="::TVChannel::TuneOption::originalNetworkID">
        <webidl>        long? originalNetworkID;</webidl>
        <descriptive>
            <brief>
 Original network ID
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long" nullable="nullable"/>
      </DictionaryMember>
    </Dictionary>
    <Interface name="ChannelInfo" id="::TVChannel::ChannelInfo">
      <webidl>    [NoInterfaceObject] interface ChannelInfo {
        readonly attribute long major;

        readonly attribute long minor;

        readonly attribute DOMString channelName;

        readonly attribute long programNumber;

        readonly attribute long ptc;

        readonly attribute long lcn;

        readonly attribute long sourceID;

        readonly attribute long transportStreamID;

        readonly attribute long originalNetworkID;

        readonly attribute DOMString serviceName;
    };</webidl>
      <descriptive>
          <brief>
 This interface represents the object for identifying a TV channel.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="major" id="::TVChannel::ChannelInfo::major">
        <webidl>        readonly attribute long major;</webidl>
        <descriptive>
            <brief>
 The major channel number
<br/>The first number in a two-part number used to identify a virtual channel.
Each virtual channel carries one service, such as a television program.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="minor" id="::TVChannel::ChannelInfo::minor">
        <webidl>        readonly attribute long minor;</webidl>
        <descriptive>
            <brief>
 The minor channel number
<br/>The second number in a two-part number used to identify a virtual channel.
The minor number changes for each different service that is or will be present in a DTV transport stream.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="channelName" id="::TVChannel::ChannelInfo::channelName">
        <webidl>        readonly attribute DOMString channelName;</webidl>
        <descriptive>
            <brief>
 Channel Name to represent the station's indentity
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="programNumber" id="::TVChannel::ChannelInfo::programNumber">
        <webidl>        readonly attribute long programNumber;</webidl>
        <descriptive>
            <brief>
 Program number
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="ptc" id="::TVChannel::ChannelInfo::ptc">
        <webidl>        readonly attribute long ptc;</webidl>
        <descriptive>
            <brief>
 PTC(Physical Transmission Channel) number
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="lcn" id="::TVChannel::ChannelInfo::lcn">
        <webidl>        readonly attribute long lcn;</webidl>
        <descriptive>
            <brief>
 The logical channel number
<br/>It is used in DVB(Digital Video Broadcasting) standards for digital television.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="sourceID" id="::TVChannel::ChannelInfo::sourceID">
        <webidl>        readonly attribute long sourceID;</webidl>
        <descriptive>
            <brief>
 source ID
            </brief>
           <description>
            <p>
It is a number that uniquely identifies a source of scheduled programming.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="transportStreamID" id="::TVChannel::ChannelInfo::transportStreamID">
        <webidl>        readonly attribute long transportStreamID;</webidl>
        <descriptive>
            <brief>
 TSID (Transport Stream ID or transmission signal ID)
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="originalNetworkID" id="::TVChannel::ChannelInfo::originalNetworkID">
        <webidl>        readonly attribute long originalNetworkID;</webidl>
        <descriptive>
            <brief>
 Original Network ID
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="serviceName" id="::TVChannel::ChannelInfo::serviceName">
        <webidl>        readonly attribute DOMString serviceName;</webidl>
        <descriptive>
            <brief>
 Service Name
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
    </Interface>
    <Interface name="ProgramInfo" id="::TVChannel::ProgramInfo">
      <webidl>    [NoInterfaceObject] interface ProgramInfo {
        readonly attribute DOMString title;

        readonly attribute <ref>TZDate</ref> startTime;

        readonly attribute long duration;

        readonly attribute DOMString? detailedDescription;

        readonly attribute DOMString? language;

        readonly attribute DOMString? rating;
    };</webidl>
      <descriptive>
          <brief>
 This interface represents information about the television program.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="title" id="::TVChannel::ProgramInfo::title">
        <webidl>        readonly attribute DOMString title;</webidl>
        <descriptive>
            <brief>
 The program title
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString"/>
      </Attribute>
      <Attribute readonly="readonly" name="startTime" id="::TVChannel::ProgramInfo::startTime">
        <webidl>        readonly attribute <ref>TZDate</ref> startTime;</webidl>
        <descriptive>
            <brief>
 The program start time
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="TZDate"/>
      </Attribute>
      <Attribute readonly="readonly" name="duration" id="::TVChannel::ProgramInfo::duration">
        <webidl>        readonly attribute long duration;</webidl>
        <descriptive>
            <brief>
 The duration of the program
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
      <Attribute readonly="readonly" name="detailedDescription" id="::TVChannel::ProgramInfo::detailedDescription">
        <webidl>        readonly attribute DOMString? detailedDescription;</webidl>
        <descriptive>
            <brief>
 A detailed description of the program's content.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="language" id="::TVChannel::ProgramInfo::language">
        <webidl>        readonly attribute DOMString? language;</webidl>
        <descriptive>
            <brief>
 Language information
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
      <Attribute readonly="readonly" name="rating" id="::TVChannel::ProgramInfo::rating">
        <webidl>        readonly attribute DOMString? rating;</webidl>
        <descriptive>
            <brief>
 Rating information
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="DOMString" nullable="nullable"/>
      </Attribute>
    </Interface>
  </Module>
  <Module name="TVDisplayControl" id="::TVDisplayControl">
    <webidl>module TVDisplayControl {

    enum Display3DEffectMode {
        &quot;OFF&quot;,
        &quot;TOP_BOTTOM&quot;,
        &quot;SIDE_BY_SIDE&quot;,
        &quot;LINE_BY_LINE&quot;,
        &quot;VERTICAL_STRIPE&quot;,
        &quot;FRAME_SEQUENCE&quot;,
        &quot;CHECKER_BD&quot;,
        &quot;FROM_2D_TO_3D&quot;
    };

    enum Display3DModeState {
        &quot;NOT_CONNECTED&quot;,
        &quot;NOT_SUPPORTED&quot;,
        &quot;READY&quot;
    };

    [NoInterfaceObject] interface DisplayControlManagerObject {
        readonly attribute <ref>DisplayControlManager</ref> tvdisplaycontrol;
    };
    <ref>Tizen</ref> implements <ref>DisplayControlManagerObject</ref>;

    [NoInterfaceObject] interface DisplayControlManager {

        <ref>Display3DEffectMode</ref> get3DEffectMode() raises(<ref>WebAPIException</ref>);

        <ref>Display3DModeState</ref> is3DModeEnabled() raises(<ref>WebAPIException</ref>);

        void getSupported3DEffectModeList(<ref>Mode3DEffectListSupportCallback</ref> successCallback,
                                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);
    };

    [Callback=FunctionOnly, NoInterfaceObject] interface Mode3DEffectListSupportCallback {
        void onsuccess(<ref>Display3DEffectMode</ref>[] mode3DEffects);
    };

};</webidl>
    <descriptive>
        <brief>
        </brief>
       <description>
        <p>
This API provides interfaces for managing stereoscopic 3D effects
for television signals.
        </p>
        <p>
Modern TVs and projectors can display two images, left image and right image,
which are displayed to left eye and right eye. This technique creates
illusion of depth, which is perceived by users as 3D image.
        </p>
        <p>
For more information about stereoscopy, see
<a href="http://en.wikipedia.org/wiki/Stereoscopy">Wikipedia article</a>.
        </p>
        <p>
There are several formats of input images supported by stereoscopy
plugin:
        </p>
        <ul>
          <li>
Side-by-side: Left and Right images are merged into one
picture, left image at left side, right image at right
side. Both images are scaled to fit in original
image ratio.          </li>
          <li>
Top-bottom: Left and Right images are merged into one
picture, left image at top side, right image at bottom side.
and scaled to fit in original image ratio.          </li>
          <li>
Line-by-line: Left and Right images are interlaced by row first left,
second right.          </li>
          <li>
Vertical-strip: Left and Right images are interlaced by colum,
first left, second right.          </li>
          <li>
Frame-sequence: Left and Right images are interlaced by frames.          </li>
        </ul>
        <p>
An advanced devices are able to computationally generate depth
data by processing non-stereoscopic images. A depth data is used
to render left and right stereoscopic images from a source image lacking
this information. A quality of such stereoscopic images depends
on computational power used for processing, algorithms and properties
of source data. For more information see
<a href="http://en.wikipedia.org/wiki/2D_to_3D_conversion">article at Wikipedia.</a>        </p>
        <p>
There will be a <em>tizen.tvdisplaycontrol</em> object that allows accessing the
functionality of the display control API.
        </p>
       </description>
        <version>
 2.3
        </version>
        <def-api-feature identifier="http://tizen.org/feature/tv.display">
          <descriptive>
           <description>
            <p>
To guarantee the running of this application on a device with a TV display control support, define the following requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
    </descriptive>
    <Enum name="Display3DEffectMode" id="::TVDisplayControl::Display3DEffectMode">
      <webidl>    enum Display3DEffectMode {
        &quot;OFF&quot;,
        &quot;TOP_BOTTOM&quot;,
        &quot;SIDE_BY_SIDE&quot;,
        &quot;LINE_BY_LINE&quot;,
        &quot;VERTICAL_STRIPE&quot;,
        &quot;FRAME_SEQUENCE&quot;,
        &quot;CHECKER_BD&quot;,
        &quot;FROM_2D_TO_3D&quot;
    };</webidl>
      <descriptive>
          <brief>
 An enumerator to indicate 3D effect mode.
          </brief>
         <description>
          <ul>
            <li>
OFF - identifier for 3DEffect mode off             </li>
            <li>
TOP_BOTTOM - Top-bottom: Left at top, right at bottom             </li>
            <li>
SIDE_BY_SIDE - Top-bottom: Left at left side, right at right
side             </li>
            <li>
LINE_BY_LINE - Line-by-line: Left and right image interlaced
by row             </li>
            <li>
VERTICAL_STRIP - Vertical-strip: Left and right image interlaced
by column             </li>
            <li>
FRAME_SEQUENCE -  Left and right image interlaced by frame             </li>
            <li>
CHECKER_BD - Checkerboard (only for PC or game console sources)             </li>
            <li>
FROM_2D_TO_3D - Left and right image computed from
No-stereoscopic image             </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="OFF">
        <webidl>        &quot;OFF</webidl>
      </EnumValue>
      <EnumValue stringvalue="TOP_BOTTOM">
        <webidl>        &quot;TOP_BOTTOM</webidl>
      </EnumValue>
      <EnumValue stringvalue="SIDE_BY_SIDE">
        <webidl>        &quot;SIDE_BY_SIDE</webidl>
      </EnumValue>
      <EnumValue stringvalue="LINE_BY_LINE">
        <webidl>        &quot;LINE_BY_LINE</webidl>
      </EnumValue>
      <EnumValue stringvalue="VERTICAL_STRIPE">
        <webidl>        &quot;VERTICAL_STRIPE</webidl>
      </EnumValue>
      <EnumValue stringvalue="FRAME_SEQUENCE">
        <webidl>        &quot;FRAME_SEQUENCE</webidl>
      </EnumValue>
      <EnumValue stringvalue="CHECKER_BD">
        <webidl>        &quot;CHECKER_BD</webidl>
      </EnumValue>
      <EnumValue stringvalue="FROM_2D_TO_3D">
        <webidl>        &quot;FROM_2D_TO_3D</webidl>
      </EnumValue>
    </Enum>
    <Enum name="Display3DModeState" id="::TVDisplayControl::Display3DModeState">
      <webidl>    enum Display3DModeState {
        &quot;NOT_CONNECTED&quot;,
        &quot;NOT_SUPPORTED&quot;,
        &quot;READY&quot;
    };</webidl>
      <descriptive>
          <brief>
 An enumerator to indicate the state to play 3D mode.
          </brief>
         <description>
          <ul>
            <li>
 NOT_CONNECTED - The device(e.g. Blu-ray player) supports 3D mode but 3D display is not connected.            </li>
            <li>
 NOT_SUPPORTED - The device does not support 3D mode.            </li>
            <li>
 READY - The device supports 3D mode and it can display 3D mode.            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="NOT_CONNECTED">
        <webidl>        &quot;NOT_CONNECTED</webidl>
      </EnumValue>
      <EnumValue stringvalue="NOT_SUPPORTED">
        <webidl>        &quot;NOT_SUPPORTED</webidl>
      </EnumValue>
      <EnumValue stringvalue="READY">
        <webidl>        &quot;READY</webidl>
      </EnumValue>
    </Enum>
    <Interface name="DisplayControlManagerObject" id="::TVDisplayControl::DisplayControlManagerObject">
      <webidl>    [NoInterfaceObject] interface DisplayControlManagerObject {
        readonly attribute <ref>DisplayControlManager</ref> tvdisplaycontrol;
    };</webidl>
      <descriptive>
          <brief>
 This interface defines what is instantiated by the <em>tizen</em> object.
There will be a <em>tizen.tvdisplaycontrol </em>object that allows the access to the Display Control API.
          </brief>
         <description>
          <p>
For example, Display Control API provides whether your device supports 3D.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="tvdisplaycontrol" id="::TVDisplayControl::DisplayControlManagerObject::tvdisplaycontrol">
        <webidl>        readonly attribute <ref>DisplayControlManager</ref> tvdisplaycontrol;</webidl>
        <Type name="DisplayControlManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="DisplayControlManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>DisplayControlManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="DisplayControlManager" id="::TVDisplayControl::DisplayControlManager">
      <webidl>    [NoInterfaceObject] interface DisplayControlManager {

        <ref>Display3DEffectMode</ref> get3DEffectMode() raises(<ref>WebAPIException</ref>);

        <ref>Display3DModeState</ref> is3DModeEnabled() raises(<ref>WebAPIException</ref>);

        void getSupported3DEffectModeList(<ref>Mode3DEffectListSupportCallback</ref> successCallback,
                                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);
    };</webidl>
      <descriptive>
          <brief>
 This interface provides access to the Display Control API functionalities through the <em>tizen.tvdisplaycontrol</em> interface.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="get3DEffectMode" id="::TVDisplayControl::DisplayControlManager::get3DEffectMode">
        <webidl>        <ref>Display3DEffectMode</ref> get3DEffectMode() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the current 3D effect mode.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.display
            </privilege>
            <Code> try {
      var current3Dmode = tizen.tvdisplaycontrol.get3DEffectMode()
      console.log(&quot;The current 3D mode is &quot; + current3Dmode + &quot;.&quot;);
 } catch (error) {
     console.log(error.name);
 }
 </Code>
        </descriptive>
        <Type name="Display3DEffectMode">
          <descriptive>
              <description><p>
 Display3DEffectMode The current mode of 3D effect
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error name &quot;SecurityError&quot; if this functionality is not allowed.
                </p></description>
                <description><p>
 with error name &quot;NotSupportedError&quot; if the feature is not supported.
                </p></description>
                <description><p>
 with error name &quot;UnknownError&quot; in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="is3DModeEnabled" id="::TVDisplayControl::DisplayControlManager::is3DModeEnabled">
        <webidl>        <ref>Display3DModeState</ref> is3DModeEnabled() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Checks whether playing 3D mode is available or not.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.display
            </privilege>
            <Code> try {
     if (tizen.tvdisplaycontrol.is3DModeEnabled() === &quot;NOT_SUPPORTED&quot;) {
         console.log(&quot;The current device does not support 3D mode.&quot;);
     } else if (tizen.tvdisplaycontrol.is3DModeEnabled() === &quot;READY&quot;) {
         console.log(&quot;The current device supports 3D mode and can display 3D contents. Maybe it is a 3D TV device or is connected with 3D display device.&quot;);
     } else {
         console.log(&quot;The current device supports 3D mode but cannot display 3D contents. It may be a 3D Blu-ray player device which is not connected with 3D display device.&quot;);
     }
 } catch (error) {
     console.log(error.name);
 }
 </Code>
        </descriptive>
        <Type name="Display3DModeState">
          <descriptive>
              <description><p>
 Display3DModeState The current state to display 3D contents
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error name &quot;SecurityError&quot; if this functionality is not allowed.
                </p></description>
                <description><p>
 with error name &quot;NotSupportedError&quot; if the feature is not supported.
                </p></description>
                <description><p>
 with error name &quot;UnknownError&quot; in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getSupported3DEffectModeList" id="::TVDisplayControl::DisplayControlManager::getSupported3DEffectModeList">
        <webidl>        void getSupported3DEffectModeList(<ref>Mode3DEffectListSupportCallback</ref> successCallback,
                                  optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the supported 3D effects.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.display
            </privilege>
            <Code> function successCB(effects) {
     for( var i = 0; i &#60; effects.length; ++i ) {
         console.log(effects[i] +&quot; : this mode is supported on a device.&quot;);
     }
 }

 function errorCB(error) {
     console.log(&quot;An error occurs when getSupported3DEffectModeList() is invoked. Error(name: &quot; + error.name +&quot; , message: &quot;+ error.message +&quot;)&quot;);
 }

 try {
     tizen.tvdisplaycontrol.getSupported3DEffectModeList(successCB, errorCB);
 } catch (error) {
     console.log(error.name);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when a list of supported 3D modes is retrieved successfully.
                </p></description>
            </descriptive>
            <Type name="Mode3DEffectListSupportCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error name &quot;TypeMismatchError&quot; for wrong types of values passed.
                </p></description>
                <description><p>
 with error name &quot;SecurityError&quot; if this functionality is not allowed.
                </p></description>
                <description><p>
 with error name &quot;NotSupportedError&quot; if the feature is not supported.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="Mode3DEffectListSupportCallback" id="::TVDisplayControl::Mode3DEffectListSupportCallback">
      <webidl>    [Callback=FunctionOnly, NoInterfaceObject] interface Mode3DEffectListSupportCallback {
        void onsuccess(<ref>Display3DEffectMode</ref>[] mode3DEffects);
    };</webidl>
      <descriptive>
          <brief>
 This interface defines a callback when a list of supported 3D modes is retrieved successfully.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::TVDisplayControl::Mode3DEffectListSupportCallback::onsuccess">
        <webidl>        void onsuccess(<ref>Display3DEffectMode</ref>[] mode3DEffects);</webidl>
        <descriptive>
            <brief>
 Method invoked when the list of 3D modes is retrieved successfully.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="mode3DEffects">
            <descriptive>
                <description><p>
 A list of supported 3D effect modes
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="Display3DEffectMode"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="TVInputDevice" id="::TVInputDevice">
    <webidl>module TVInputDevice {
    typedef DOMString InputDeviceKeyName;

    [NoInterfaceObject] interface TVInputDeviceManagerObject {
        readonly attribute <ref>TVInputDeviceManager</ref> tvinputdevice;
    };
    <ref>Tizen</ref> implements <ref>TVInputDeviceManagerObject</ref>;

    [NoInterfaceObject] interface InputDeviceKey {
        readonly attribute <ref>InputDeviceKeyName</ref> name;

        readonly attribute long code;
    };

    [NoInterfaceObject] interface TVInputDeviceManager {
        <ref>InputDeviceKey</ref>[] getSupportedKeys() raises(<ref>WebAPIException</ref>);

        <ref>InputDeviceKey</ref>? getKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);

        void registerKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);

        void unregisterKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);
    };

};</webidl>
    <descriptive>
        <brief>
 The TV Input Device API provides functions to subscribe key events of the input device.
        </brief>
       <description>
        <p>
The following remote control keys are mandatory input device keys. They are available to an application on any Tizen TV.
        </p>
        <ul>
          <li>
ArrowLeft, ArrowUp, ArrowRight, ArrowDown          </li>
          <li>
Enter          </li>
          <li>
Back          </li>
        </ul>
        <p>
The Tizen TV may provide additional keys depending on a particular input device.
An application can handle device dependent key events after registration.
        </p>
       </description>
        <version>
 2.3
        </version>
        <def-api-feature identifier="http://tizen.org/feature/tv.inputdevice">
          <descriptive>
           <description>
            <p>
To guarantee the running of this application on a device with a TV input device support, define the following requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
    </descriptive>
    <Typedef name="InputDeviceKeyName" id="::TVInputDevice::InputDeviceKeyName">
      <webidl>    typedef DOMString InputDeviceKeyName;</webidl>
      <descriptive>
          <brief>
 Name which identifies the key
          </brief>
         <description>
          <p>
Name of the key may be, for example:
          </p>
          <ul>
            <li>
VolumeUp            </li>
            <li>
VolumeDown            </li>
            <li>
ChannelUp            </li>
            <li>
ChannelDown            </li>
          </ul>
          <p>
The actual list of supported keys depends on the platform.
          </p>
         </description>
      </descriptive>
      <Type type="DOMString"/>
    </Typedef>
    <Interface name="TVInputDeviceManagerObject" id="::TVInputDevice::TVInputDeviceManagerObject">
      <webidl>    [NoInterfaceObject] interface TVInputDeviceManagerObject {
        readonly attribute <ref>TVInputDeviceManager</ref> tvinputdevice;
    };</webidl>
      <descriptive>
          <brief>
 The TVInputDeviceManager interface defines what is instantiated in the tizen object.
          </brief>
         <description>
          <p>
There is a tizen.tvinputdevice object that allows accessing the functionality of the TV Input Device API.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="tvinputdevice" id="::TVInputDevice::TVInputDeviceManagerObject::tvinputdevice">
        <webidl>        readonly attribute <ref>TVInputDeviceManager</ref> tvinputdevice;</webidl>
        <Type name="TVInputDeviceManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="TVInputDeviceManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>TVInputDeviceManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="InputDeviceKey" id="::TVInputDevice::InputDeviceKey">
      <webidl>    [NoInterfaceObject] interface InputDeviceKey {
        readonly attribute <ref>InputDeviceKeyName</ref> name;

        readonly attribute long code;
    };</webidl>
      <descriptive>
          <brief>
 The InputDeviceKey interface stores information about the key.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="name" id="::TVInputDevice::InputDeviceKey::name">
        <webidl>        readonly attribute <ref>InputDeviceKeyName</ref> name;</webidl>
        <descriptive>
            <brief>
 The name of the key, for example <var>&quot;VolumeUp&quot;</var> or <var>&quot;ChannelDown&quot;</var>.
            </brief>
           <description>
            <p>
If the key is listed in the <a href="http://www.w3.org/TR/2014/WD-DOM-Level-3-Events-key-20140612">DOM Level 3 KeyboardEvent key Values</a> specification, the <em>name</em> attribute is equal to the <em>key value</em> specified there. (The <a href="http://www.w3.org/TR/2014/WD-DOM-Level-3-Events-key-20140612/#keys-media-controller">Media Controller Keys</a> section is the most relevant to the Input Device API)
            </p>
            <p>
If the &quot;DOM Level 3 KeyboardEvent key Value&quot; does not contain appropriate entry for the key, then the Input Device provides a device specific <em>name</em>.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type name="InputDeviceKeyName"/>
      </Attribute>
      <Attribute readonly="readonly" name="code" id="::TVInputDevice::InputDeviceKey::code">
        <webidl>        readonly attribute long code;</webidl>
        <descriptive>
            <brief>
 The numeric code of the key, like <var>37</var> or <var>13</var>.
            </brief>
           <description>
            <p>
This is the <em>keyCode</em> attribute value of the Key Event generated by the key.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="long"/>
      </Attribute>
    </Interface>
    <Interface name="TVInputDeviceManager" id="::TVInputDevice::TVInputDeviceManager">
      <webidl>    [NoInterfaceObject] interface TVInputDeviceManager {
        <ref>InputDeviceKey</ref>[] getSupportedKeys() raises(<ref>WebAPIException</ref>);

        <ref>InputDeviceKey</ref>? getKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);

        void registerKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);

        void unregisterKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);
    };</webidl>
      <descriptive>
          <brief>
 The TVInputDeviceManager interface provides the features to check for availability and register for input device events.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="getSupportedKeys" id="::TVInputDevice::TVInputDeviceManager::getSupportedKeys">
        <webidl>        <ref>InputDeviceKey</ref>[] getSupportedKeys() raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Retrieves the list of keys can be registered with the <em>registerKey()</em> method.
            </brief>
           <description>
            <p>
Mandatory keys will not be retrieved by this method.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.inputdevice
            </privilege>
            <Code> var i, keyCode = {}, supportedKeys;
 supportedKeys = tizen.tvinputdevice.getSupportedKeys();
 for (i = 0; i &#60; supportedKeys.length; i++) {
     keyCode[supportedKeys[i].name] = supportedKeys[i].code;
 }
 if(keyCode.hasOwnProperty(&quot;ChannelUp&quot;)) {
     tizen.tvinputdevice.registerKey(&quot;ChannelUp&quot;);
 }
 window.addEventListener(&quot;keydown&quot;, function(keyEvent) {
     // identify the key by the numeric code from the keyEvent
     if(keyEvent.keyCode === keyCode.ChannelUp) {
         console.log(&quot;The CHANNEL UP was pressed&quot;);
     }
 });

 </Code>
        </descriptive>
        <Type type="array">
          <Type name="InputDeviceKey"/>
        </Type>
        <ArgumentList/>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type UnknownError in case of any error.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getKey" id="::TVInputDevice::TVInputDeviceManager::getKey">
        <webidl>        <ref>InputDeviceKey</ref>? getKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Returns information about the key which has the given name.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.inputdevice
            </privilege>
        </descriptive>
        <Type name="InputDeviceKey" nullable="nullable">
          <descriptive>
              <description><p>
 InputDeviceKey InputDeviceKey object for the given key name, or null if the key is not supported
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument name="keyName">
            <descriptive>
                <description><p>
 The name of the key to retrieve
                </p></description>
            </descriptive>
            <Type name="InputDeviceKeyName"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError if the given keyName is invalid (e.g. name is empty string)
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="registerKey" id="::TVInputDevice::TVInputDeviceManager::registerKey">
        <webidl>        void registerKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Registers an input device key to receive DOM keyboard event when it is pressed or released
            </brief>
           <description>
            <p>
When an application wants to react to the Input Device keys being pressed, it should register this key.
            </p>
            <p>
An application can not register the mandatory keys (ArrowLeft, ArrowRight, ArrowUp, ArrowDown, Enter, Back).
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.inputdevice
            </privilege>
            <Code> var keys = [&quot;VolumeUp&quot;, &quot;VolumeDown&quot;], i;
 for (i = 0; i &#60; keys.length; i++) {
     try {
         tizen.tvinputdevice.registerKey(keys[i]);
     } catch(error) {
         console.log(&quot;failed to register &quot; + keys[i] + &quot;: &quot; + error);
     }
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="keyName">
            <descriptive>
                <description><p>
 The name of the key which should generate DOM key events when pressed
                </p></description>
            </descriptive>
            <Type name="InputDeviceKeyName"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError, if the given keyName is invalid or not supported (e.g. name is empty string).
                </p></description>
                <description><p>
 with error type UnknownError in any other error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="unregisterKey" id="::TVInputDevice::TVInputDeviceManager::unregisterKey">
        <webidl>        void unregisterKey(<ref>InputDeviceKeyName</ref> keyName) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Unregisters an input device key
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.inputdevice
            </privilege>
            <Code> tizen.tvinputdevice.unregisterKey(&quot;VolumeDown&quot;);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="keyName">
            <descriptive>
                <description><p>
 The name of the key which should not be monitored any longer
                </p></description>
            </descriptive>
            <Type name="InputDeviceKeyName"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type InvalidValuesError, if the given keyName is invalid or not supported (e.g. name is empty string).
                </p></description>
                <description><p>
 with error type UnknownError in any error case.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
  </Module>
  <Module name="TVWindow" id="::TVWindow">
    <webidl>module TVWindow {

    enum WindowType {
        &quot;MAIN&quot;,
    };

    enum MeasurementUnit {
        &quot;px&quot;,
        &quot;%&quot;
    };

    [NoInterfaceObject] interface TVWindowManagerObject {
        readonly attribute <ref>TVWindowManager</ref> tvwindow;
    };
    <ref>Tizen</ref> implements <ref>TVWindowManagerObject</ref>;

    [NoInterfaceObject] interface TVWindowManager {
        void getAvailableWindows(<ref>AvailableWindowListCallback</ref> successCallback,
                       optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

        void setSource(<ref>SystemInfoVideoSourceInfo</ref> videoSource,
                       <ref>SourceChangedSuccessCallback</ref> successCallback,
                       optional <ref>ErrorCallback</ref>? errorCallback,
                       optional <ref>WindowType</ref>? type) raises (<ref>WebAPIException</ref>);

        <ref>SystemInfoVideoSourceInfo</ref> getSource(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void show(<ref>WindowRectangleSuccessCallback</ref> successCallback,
                 optional <ref>ErrorCallback</ref>? errorCallback,
                 optional DOMString[]? rectangle,
                 optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void hide(<ref>SuccessCallback</ref> successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback,
                  optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void getRect(<ref>WindowRectangleSuccessCallback</ref> successCallback,
                 optional <ref>ErrorCallback</ref>? errorCallback,
                 optional <ref>MeasurementUnit</ref>? unit,
                 optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

    };

    [Callback = FunctionOnly, NoInterfaceObject] interface AvailableWindowListCallback {
        void onsuccess(<ref>WindowType</ref>[] type);
    };

    [Callback = FunctionOnly, NoInterfaceObject] interface WindowRectangleSuccessCallback {
        void onsuccess(DOMString[] windowRect, <ref>WindowType</ref> type);
    };

    [Callback = FunctionOnly, NoInterfaceObject] interface SourceChangedSuccessCallback {
        void onsuccess(<ref>SystemInfoVideoSourceInfo</ref> source, <ref>WindowType</ref> type);
    };

};</webidl>
    <descriptive>
        <brief>
        </brief>
       <description>
        <p>
This API provides a way to embed the display of a video source in a Tizen web application running on a device associated with the TV.
It allows to select one of the available video sources and to show or hide the disply in a Tizen Web application.
There will be a <em>tizen.tvwindow</em> object that allows access to the functionality of the TV Window API.
Please note that the TV Window API does not make or manage any windows, it controls
virtual hole in a Tizen web application, which is used to show a video source
supported by hardware. If you want to show a TV signal, then you execute
show function, which cuts a hole from the window of your application.
The user can watch TV through this hole. A TV source is controlled by the user or
by you with the API. You do not have to implement any routines, if you
do not want to interact with TV image.
        </p>
       </description>
        <Code>          -         -
             -    -
               -
    ------------------------
    |                      |
    |         +---------+  |
    |         | TV hole |  |
    |         +---------+  |
    |                      |
    |   YOUR APPLICATION   |
    |                      |
    |                      |
    ------------------------
 </Code>
        <version>
 2.3
        </version>
        <def-api-feature identifier="http://tizen.org/feature/tv.pip">
          <descriptive>
           <description>
            <p>
To guarantee the running of this application on a device with a TV picture-in-picture support, define the following requirements in the config file:
            </p>
           </description>
          </descriptive>
        </def-api-feature>
    </descriptive>
    <Enum name="WindowType" id="::TVWindow::WindowType">
      <webidl>    enum WindowType {
        &quot;MAIN&quot;,
    };</webidl>
      <descriptive>
          <brief>
 An enumerator to indicate the window type.
          </brief>
         <description>
          <ul>
            <li>
 MAIN - The main video window, which can be show anywhere            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="MAIN">
        <webidl>        &quot;MAIN</webidl>
      </EnumValue>
    </Enum>
    <Enum name="MeasurementUnit" id="::TVWindow::MeasurementUnit">
      <webidl>    enum MeasurementUnit {
        &quot;px&quot;,
        &quot;%&quot;
    };</webidl>
      <descriptive>
          <brief>
 An enumerator to indicate the units of measurement for specifying the measurement unit when calling <b>getRect()</b>.
          </brief>
         <description>
          <ul>
            <li>
 <em>px</em> - pixel unit            </li>
            <li>
 <em>%</em> - percents unit for specifying relative size            </li>
          </ul>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <EnumValue stringvalue="px">
        <webidl>        &quot;px</webidl>
      </EnumValue>
      <EnumValue stringvalue="%">
        <webidl>        &quot;%</webidl>
      </EnumValue>
    </Enum>
    <Interface name="TVWindowManagerObject" id="::TVWindow::TVWindowManagerObject">
      <webidl>    [NoInterfaceObject] interface TVWindowManagerObject {
        readonly attribute <ref>TVWindowManager</ref> tvwindow;
    };</webidl>
      <descriptive>
          <brief>
 This interface defines what is instantiated by the <em>tizen</em> object.
          </brief>
         <description>
          <p>
There will be a <em>tizen.tvwindow</em> object that allows access to the
functionality of the TV Window API.
          </p>
         </description>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="tvwindow" id="::TVWindow::TVWindowManagerObject::tvwindow">
        <webidl>        readonly attribute <ref>TVWindowManager</ref> tvwindow;</webidl>
        <Type name="TVWindowManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="TVWindowManagerObject">
      <webidl>    <ref>Tizen</ref> implements <ref>TVWindowManagerObject</ref>;</webidl>
    </Implements>
    <Interface name="TVWindowManager" id="::TVWindow::TVWindowManager">
      <webidl>    [NoInterfaceObject] interface TVWindowManager {
        void getAvailableWindows(<ref>AvailableWindowListCallback</ref> successCallback,
                       optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);

        void setSource(<ref>SystemInfoVideoSourceInfo</ref> videoSource,
                       <ref>SourceChangedSuccessCallback</ref> successCallback,
                       optional <ref>ErrorCallback</ref>? errorCallback,
                       optional <ref>WindowType</ref>? type) raises (<ref>WebAPIException</ref>);

        <ref>SystemInfoVideoSourceInfo</ref> getSource(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void show(<ref>WindowRectangleSuccessCallback</ref> successCallback,
                 optional <ref>ErrorCallback</ref>? errorCallback,
                 optional DOMString[]? rectangle,
                 optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void hide(<ref>SuccessCallback</ref> successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback,
                  optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

        void getRect(<ref>WindowRectangleSuccessCallback</ref> successCallback,
                 optional <ref>ErrorCallback</ref>? errorCallback,
                 optional <ref>MeasurementUnit</ref>? unit,
                 optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);

    };</webidl>
      <descriptive>
          <brief>
 This interface provides access to the API funtionalities through the <em>tizen.tvwindow</em> interface.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="getAvailableWindows" id="::TVWindow::TVWindowManager::getAvailableWindows">
        <webidl>        void getAvailableWindows(<ref>AvailableWindowListCallback</ref> successCallback,
                       optional <ref>ErrorCallback</ref>? errorCallback) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the list of available windows.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.window
            </privilege>
            <Code> function successCB(availableWindows) {
    for (var i = 0; i &#60; availableWindows.length; i++) {
        console.log(&quot;Window [&quot;+ i + &quot;] = &quot; + availableWindows[i]);
    }
 }

 try {
     tizen.tvwindow.getAvailableWindows(successCB);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when a list of the available windows is retrieved successfully.
                </p></description>
            </descriptive>
            <Type name="AvailableWindowListCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="setSource" id="::TVWindow::TVWindowManager::setSource">
        <webidl>        void setSource(<ref>SystemInfoVideoSourceInfo</ref> videoSource,
                       <ref>SourceChangedSuccessCallback</ref> successCallback,
                       optional <ref>ErrorCallback</ref>? errorCallback,
                       optional <ref>WindowType</ref>? type) raises (<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Changes the source of TV hole window.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.window
            </privilege>
            <Code> var connectedVideoSources;
 function successCB(source, type) {
     console.log(&quot;setSource() is successfully done. source name = &quot; + source.name + &quot;, source port number = &quot; + source.number);
 }

 function errorCB(error) {
     console.log(&quot;setSource() is failed. Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }

 function systemInfoSuccessCB(videoSource) {
     connectedVideoSources = videoSource.connected;
     for (var i = 0; i &#60; connectedVideoSources.length; i++) {
         console.log(&quot;--------------- Source &quot; + i + &quot; ---------------&quot;);
         console.log(&quot;type = &quot; + connectedVideoSources[i].type);
         console.log(&quot;number = &quot; + connectedVideoSources[i].number);
         if (connectedVideoSources[i].type === &quot;HDMI&quot;) {
             // set HDMI as input source of TV hole window
             tizen.tvwindow.setSource(connectedVideoSources[i], successCB, errorCB);
             break;
         }
     }
 }

 function systemInfoErrorCB(error) {
     console.log(&quot;getPropertyValue(VIDEOSOURCE) is failed. Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }

 try {
     tizen.systeminfo.getPropertyValue(&quot;VIDEOSOURCE&quot;, systemInfoSuccessCB, systemInfoErrorCB);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="videoSource">
            <descriptive>
                <description><p>
 The video source to set. The possible video sources can be obtained through <b>tizen.systeminfo.getPropertyValue(&quot;VIDEOSOURCE&quot;)</b>.
                </p></description>
            </descriptive>
            <Type name="SystemInfoVideoSourceInfo"/>
          </Argument>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when the intput source has been changed successfully.
                </p></description>
            </descriptive>
            <Type name="SourceChangedSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getSource" id="::TVWindow::TVWindowManager::getSource">
        <webidl>        <ref>SystemInfoVideoSourceInfo</ref> getSource(optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets information about the current source of a specified TV hole window.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.window
            </privilege>
            <Code> try {
     var source = tizen.tvwindow.getSource();
     console.log(&quot;type = &quot; + source.type);
     console.log(&quot;number = &quot; + source.number);
 } catch (error) {
     console.log(&quot;Error name = &quot;+ error.name + &quot;, Error message = &quot; + error.message);
 }
 </Code>
        </descriptive>
        <Type name="SystemInfoVideoSourceInfo">
          <descriptive>
              <description><p>
 SystemInfoVideoSourceInfo The information about the current video source
              </p></description>
          </descriptive>
        </Type>
        <ArgumentList>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="show" id="::TVWindow::TVWindowManager::show">
        <webidl>        void show(<ref>WindowRectangleSuccessCallback</ref> successCallback,
                 optional <ref>ErrorCallback</ref>? errorCallback,
                 optional DOMString[]? rectangle,
                 optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sets the display area of TV hole window and show it on the display screen.
            </brief>
           <description>
            <p>
The <b>rectangle</b> parameter requires exactly four elements which are described below:
            </p>
            <ul>
              <li>
The first element indicates the x coordinate of TV hole window on display screen (distance from the left edge of the screen).              </li>
              <li>
The second element indicates the y coordinate of TV hole window on display screen (distance from the top edge of the screen).              </li>
              <li>
The third element indicates the width of TV hole window.              </li>
              <li>
The fourth element indicates the height of TV hole window.              </li>
            </ul>
            <p>
The each element can be described in either absolute value(pixel) using pixel unit &quot;px&quot;
or relative value(percentage) using percentage unit &quot;%&quot;. <br/> If you do not specify any unit after a value then it indicates pixel unit.
            </p>
            <p>
The <em>errorCallback</em> is launched with these error types:
            </p>
            <ul>
              <li>
<em>InvalidValuesError</em> will be thrown if <em>rectangle</em> has any element with invalid format(e.g. &quot;10p&quot;) or it does not have 4 elements.              </li>
              <li>
<em>NotSupportedError</em> will be thrown if you set <em>rectangle</em> which is not within the boundary of the display area or when the TV hole window is not supported in current screen orientation.               </li>
              <li>
<em>TypeMismatchError</em> will be thrown if <em>rectangle</em> is not an array.              </li>
            </ul>
           </description>
            <remark>
 You will get exactly what you put as <em>rectangle</em> argument of <em>show()</em> through <em>WindowRectangleSuccessCallback</em>.
            </remark>
            <remark>
 TV device may not support the TV window in a certain screen orientation. NotSupportedError is reported through errorCallback if the TV window can not be shown in the current screen orientation.
            </remark>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.window
            </privilege>
            <Code> function successCB(windowRect, type) {
     // You will get exactly what you put as rectangle argument of show() through windowRect.
     // expected result : [&quot;0&quot;, &quot;0px&quot;, &quot;50%&quot;, &quot;540px&quot;]
     console.log(&quot;Rectangle : [&quot; + windowRect[0] + &quot;, &quot; + windowRect[1] + &quot;, &quot; + windowRect[2] + &quot;, &quot; + windowRect[3] + &quot;]&quot;);
 }

 try {
     tizen.tvwindow.show(successCB, null, [&quot;0&quot;, &quot;0px&quot;, &quot;50%&quot;, &quot;540px&quot;], &quot;MAIN&quot;);
 } catch(error) {
     console.log(&quot;error: &quot; + error.name);
 }
 </Code>
            <Code> function successCB(windowRect, type) {
     // expected result : [&quot;0&quot;, &quot;0&quot;, &quot;50%&quot;, &quot;50%&quot;]
     console.log(&quot;Rectangle : [&quot; + windowRect[0] + &quot;, &quot; + windowRect[1] + &quot;, &quot; + windowRect[2] + &quot;, &quot; + windowRect[3] + &quot;]&quot;);
 }

 try {
     tizen.tvwindow.show(successCB, null, [&quot;0&quot;, &quot;0&quot;, &quot;50%&quot;, &quot;50%&quot;], &quot;MAIN&quot;);
 } catch(error) {
     console.log(&quot;error: &quot; + error.name);
 }
 </Code>
            <Code> function successCB(windowRect, type) {
     // expected result : [&quot;10.5%&quot;, &quot;10%&quot;, &quot;900&quot;, &quot;500px&quot;]
     console.log(&quot;Rectangle : [&quot; + windowRect[0] + &quot;, &quot; + windowRect[1] + &quot;, &quot; + windowRect[2] + &quot;, &quot; + windowRect[3] + &quot;]&quot;);
 }

 try {
     tizen.tvwindow.show(successCB, null, [&quot;10.5%&quot;, &quot;10%&quot;, &quot;900&quot;, &quot;500px&quot;]);
 } catch(error) {
     console.log(&quot;error: &quot; + error.name);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when the position and size of the TV window has been changed successfully.
                </p></description>
            </descriptive>
            <Type name="WindowRectangleSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="rectangle">
            <descriptive>
                <description><p>
 An array that contains information about the position and size of a specified TV hole window as a string with units <br/>Without this, the TV hole window will have the same size and location as shown before.<br/>But, if you have never specified a rectangle, the TV hole window will be shown in full screen mode.
                </p></description>
            </descriptive>
            <Type type="array" nullable="nullable">
              <Type type="DOMString"/>
            </Type>
          </Argument>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type InvalidValuesError, if any of the input parameters contain an invalid value.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="hide" id="::TVWindow::TVWindowManager::hide">
        <webidl>        void hide(<ref>SuccessCallback</ref> successCallback,
                  optional <ref>ErrorCallback</ref>? errorCallback,
                  optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Hides the TV hole window on the display screen.
            </brief>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.window
            </privilege>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when the window is hidden successfully.
                </p></description>
            </descriptive>
            <Type name="SuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input attribute is not compatible with the expected type for this attribute.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
                <description><p>
 with error type UnknownError if any other error occurs.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="getRect" id="::TVWindow::TVWindowManager::getRect">
        <webidl>        void getRect(<ref>WindowRectangleSuccessCallback</ref> successCallback,
                 optional <ref>ErrorCallback</ref>? errorCallback,
                 optional <ref>MeasurementUnit</ref>? unit,
                 optional <ref>WindowType</ref>? type) raises(<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Gets the area information of TV hole window on the display screen.
            </brief>
           <description>
            <p>
According to the specified <b>unit</b>, information about the area will be passed to an array that contains 4 strings through <em>WindowRectangleSuccessCallback</em> as follows :
            </p>
            <ul>
              <li>
If you set <em>&quot;px&quot;</em> as <em>unit</em>, [&quot;0px&quot;, &quot;0px&quot;, &quot;1920px&quot;, &quot;1080px&quot;]               </li>
              <li>
If you set <em>&quot;%&quot;</em> as <em>unit</em>, [&quot;0%&quot;, &quot;0%&quot;, &quot;100%&quot;, &quot;100%&quot;]               </li>
            </ul>
            <p>
If you omit <b>unit</b>, the pixel(<var>&quot;px&quot;</var>) unit will be used as a default unit.
            </p>
           </description>
            <version>
 2.3
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/tv.window
            </privilege>
            <Code> function rectangleCB(windowRect, type) {
     // You call getRect() without specifying a unit, it expresses the area information with pixel unit.
     // expected result : [&quot;0px&quot;, &quot;0px&quot;, &quot;960px&quot;, &quot;540px&quot;] if the screen resolution of a device is 1920 x 1080.
     console.log(&quot;Rectangle : [&quot; + windowRect[0] + &quot;, &quot; + windowRect[1] + &quot;, &quot; + windowRect[2] + &quot;, &quot; + windowRect[3] + &quot;]&quot;);
 }

 function successCB(windowRect, type) {
     // You will get exactly what you put as rectangle argument through windowRect.
     // expected result : [&quot;0&quot;, &quot;0&quot;, &quot;50%&quot;, &quot;50%&quot;]
     console.log(&quot;Rectangle : [&quot; + windowRect[0] + &quot;, &quot; + windowRect[1] + &quot;, &quot; + windowRect[2] + &quot;, &quot; + windowRect[3] + &quot;]&quot;);
     tizen.tvwindow.getRect(rectangleCB);
 }

 try {
     tizen.tvwindow.show(successCB, null, [&quot;0&quot;, &quot;0&quot;, &quot;50%&quot;, &quot;50%&quot;]);
 } catch(error) {
     console.log(&quot;error: &quot; + error.name);
 }
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="successCallback">
            <descriptive>
                <description><p>
 The method to invoke when the position and size of the TV hole window has been obtained successfully.
                </p></description>
            </descriptive>
            <Type name="WindowRectangleSuccessCallback"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 The method to invoke when an error occurs.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="unit">
            <descriptive>
                <description><p>
 The measurement unit for specifying the display area. By default, this attribute is set to <em>&quot;px&quot;</em>.
                </p></description>
            </descriptive>
            <Type name="MeasurementUnit" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="type">
            <descriptive>
                <description><p>
 The window type. By default, this attribute is set to <var>MAIN</var>.
                </p></description>
            </descriptive>
            <Type name="WindowType" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException"/>
        </Raises>
      </Operation>
    </Interface>
    <Interface name="AvailableWindowListCallback" id="::TVWindow::AvailableWindowListCallback">
      <webidl>    [Callback = FunctionOnly, NoInterfaceObject] interface AvailableWindowListCallback {
        void onsuccess(<ref>WindowType</ref>[] type);
    };</webidl>
      <descriptive>
          <brief>
 This interface defines a callback that is invoked when a list of available windows is retrieved successfully.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::TVWindow::AvailableWindowListCallback::onsuccess">
        <webidl>        void onsuccess(<ref>WindowType</ref>[] type);</webidl>
        <descriptive>
            <brief>
 Method invoked when a list of available windows is retrieved.
            </brief>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="type">
            <descriptive>
                <description><p>
 The available window types
                </p></description>
            </descriptive>
            <Type type="array">
              <Type name="WindowType"/>
            </Type>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="WindowRectangleSuccessCallback" id="::TVWindow::WindowRectangleSuccessCallback">
      <webidl>    [Callback = FunctionOnly, NoInterfaceObject] interface WindowRectangleSuccessCallback {
        void onsuccess(DOMString[] windowRect, <ref>WindowType</ref> type);
    };</webidl>
      <descriptive>
          <brief>
 This interface includes the success callback that is invoked when the position and size of TV hole window has been changed or retrieved.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::TVWindow::WindowRectangleSuccessCallback::onsuccess">
        <webidl>        void onsuccess(DOMString[] windowRect, <ref>WindowType</ref> type);</webidl>
        <descriptive>
            <brief>
 Method invoked when the position and size of TV hole window has been changed or retrieved
            </brief>
           <description>
            <p>
This method returns information <b>windowRect</b> and <b>type</b>.
For more detailed information about <em>windowRect</em>, see the description of <em>show()</em>.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="windowRect">
            <descriptive>
                <description><p>
 An array that contains information about the position and size of a specified TV hole window as a string with units
                </p></description>
            </descriptive>
            <Type type="array">
              <Type type="DOMString"/>
            </Type>
          </Argument>
          <Argument name="type">
            <descriptive>
                <description><p>
 The window type
                </p></description>
            </descriptive>
            <Type name="WindowType"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
    <Interface name="SourceChangedSuccessCallback" id="::TVWindow::SourceChangedSuccessCallback">
      <webidl>    [Callback = FunctionOnly, NoInterfaceObject] interface SourceChangedSuccessCallback {
        void onsuccess(<ref>SystemInfoVideoSourceInfo</ref> source, <ref>WindowType</ref> type);
    };</webidl>
      <descriptive>
          <brief>
 This interface includes the success callback that is invoked when the source has been set.
          </brief>
          <version>
 2.3
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="Callback" value="FunctionOnly">
          <webidl>Callback</webidl>
        </ExtendedAttribute>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl> NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="onsuccess" id="::TVWindow::SourceChangedSuccessCallback::onsuccess">
        <webidl>        void onsuccess(<ref>SystemInfoVideoSourceInfo</ref> source, <ref>WindowType</ref> type);</webidl>
        <descriptive>
            <brief>
 Method invoked when the new source has been set.
            </brief>
           <description>
            <p>
This method returns information <b>source</b> and <b>type</b>.
            </p>
           </description>
            <version>
 2.3
            </version>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="source">
            <descriptive>
                <description><p>
 A descriptor object <em>SystemInfoVideoSourceInfo</em> that contains information about the source used by TV.
                </p></description>
            </descriptive>
            <Type name="SystemInfoVideoSourceInfo"/>
          </Argument>
          <Argument name="type">
            <descriptive>
                <description><p>
 The window type
                </p></description>
            </descriptive>
            <Type name="WindowType"/>
          </Argument>
        </ArgumentList>
      </Operation>
    </Interface>
  </Module>
  <Module name="WebSetting" id="::WebSetting">
    <webidl>module WebSetting {

  [NoInterfaceObject] interface WebSettingObject {
    readonly attribute <ref>WebSettingManager</ref> websetting;
  };
    <ref>Tizen</ref> implements <ref>WebSettingObject</ref>;

  [NoInterfaceObject] interface WebSettingManager {

   void setUserAgentString(DOMString userAgent,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises (<ref>WebAPIException</ref>);

   void removeAllCookies(optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises (<ref>WebAPIException</ref>);

   };
};</webidl>
    <descriptive>
        <brief>
 This Web setting API defines a set of APIs that manages the setting states of the Web view in your Web application.
        </brief>
       <description>
        <p>
A Tizen Web application includes a web view and the properties below of the web view can be managed via the Web setting API:
        </p>
        <ul>
          <li>
 Delete all the cookies saved for the web view in the Web application.           </li>
          <li>
 Set a custom user agent string of the web view in the Web application.          </li>
        </ul>
        <p>
Note that all the settings using the Web setting API is bound to your application; thus, no other applications are affected via the Web setting API calls within your application.
        </p>
        <p>
For more information on the Web setting features, see <a href="../../org.tizen.mobile.web.appprogramming/html/guide/sys_guide/websetting.htm">Web Setting Guide</a>.
        </p>
       </description>
        <version>
 2.2
        </version>
    </descriptive>
    <Interface name="WebSettingObject" id="::WebSetting::WebSettingObject">
      <webidl>  [NoInterfaceObject] interface WebSettingObject {
    readonly attribute <ref>WebSettingManager</ref> websetting;
  };</webidl>
      <descriptive>
          <brief>
 This interface defines what is instantiated for the Web setting API by the <em>Tizen</em> object from the Tizen Platform.
          </brief>
         <description>
          <p>
<em>tizen.websetting</em> object is available to manage the settings of the Web view in your Web application.
          </p>
         </description>
          <version>
 2.2
          </version>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Attribute readonly="readonly" name="websetting" id="::WebSetting::WebSettingObject::websetting">
        <webidl>    readonly attribute <ref>WebSettingManager</ref> websetting;</webidl>
        <Type name="WebSettingManager"/>
      </Attribute>
    </Interface>
    <Implements name1="Tizen" name2="WebSettingObject">
      <webidl>    <ref>Tizen</ref> implements <ref>WebSettingObject</ref>;</webidl>
    </Implements>
    <Interface name="WebSettingManager" id="::WebSetting::WebSettingManager">
      <webidl>  [NoInterfaceObject] interface WebSettingManager {

   void setUserAgentString(DOMString userAgent,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises (<ref>WebAPIException</ref>);

   void removeAllCookies(optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises (<ref>WebAPIException</ref>);

   };</webidl>
      <descriptive>
          <brief>
 This is the top-level interface for the WebSetting API that managed the settings of the Web view in your Web application.
          </brief>
      </descriptive>
      <ExtendedAttributeList>
        <ExtendedAttribute name="NoInterfaceObject">
          <webidl>NoInterfaceObject</webidl>
        </ExtendedAttribute>
      </ExtendedAttributeList>
      <Operation name="setUserAgentString" id="::WebSetting::WebSettingManager::setUserAgentString">
        <webidl>   void setUserAgentString(DOMString userAgent,
              optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises (<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Sets the custom user agent string for your Web application.
            </brief>
           <description>
            <p>
This method allows the user to set the user agent string of the Web view in the Web application.  By default, the Web view in your application
has the same user agent string as the Tizen browser on the device.
            </p>
            <p>
The <em>ErrorCallback</em> is launched with these error types:
            </p>
            <ul>
              <li>
UnknownError - If any error occurs while setting the user agent string.              </li>
              <li>
InvalidValuesError - If any of the input parameters contain an invalid value.              </li>
            </ul>
           </description>
            <version>
 2.2
            </version>
            <Code> function successCallback() {
     console.log(&quot;The requested user agent string has just been set successfully.&quot;);
 }

 tizen.websetting.setUserAgentString(&quot;the new user agent string to set&quot;, successCallback);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument name="userAgent">
            <descriptive>
                <description><p>
 User agent to set for the Web view in your Web application.
                </p></description>
            </descriptive>
            <Type type="DOMString"/>
          </Argument>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 To be invoked if the requested setting operation succeeds.
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 To be invoked if the requested setting operation fails.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
      <Operation name="removeAllCookies" id="::WebSetting::WebSettingManager::removeAllCookies">
        <webidl>   void removeAllCookies(optional <ref>SuccessCallback</ref>? successCallback,
              optional <ref>ErrorCallback</ref>? errorCallback) raises (<ref>WebAPIException</ref>);</webidl>
        <descriptive>
            <brief>
 Removes all the cookies saved for the Web view in your Web application.
            </brief>
           <description>
            <p>
The Web view in your Web application can store cookies like a browser. This method allows the user to remove all the cookies saved for the Web application.
            </p>
            <p>
The <em>ErrorCallback</em> is launched with these error types:
            </p>
            <ul>
              <li>
UnknownError - If any error occurs while deleting the cookies.              </li>
            </ul>
           </description>
            <version>
 2.2
            </version>
            <privilegelevel>
 public
            </privilegelevel>
            <privilege>
 http://tizen.org/privilege/websetting
            </privilege>
            <Code> function successCallback() {
     console.log(&quot;The cookies saved for your application have just been removed.&quot;);
 }

 tizen.websetting.removeAllCookies(successCallback);
 </Code>
        </descriptive>
        <Type type="void"/>
        <ArgumentList>
          <Argument optional="optional" name="successCallback">
            <descriptive>
                <description><p>
 To be invoked if the requested delete operation succeeds.
                </p></description>
            </descriptive>
            <Type name="SuccessCallback" nullable="nullable"/>
          </Argument>
          <Argument optional="optional" name="errorCallback">
            <descriptive>
                <description><p>
 To be invoked if the requested delete operation fails.
                </p></description>
            </descriptive>
            <Type name="ErrorCallback" nullable="nullable"/>
          </Argument>
        </ArgumentList>
        <Raises>
          <RaiseException name="WebAPIException">
            <descriptive>
                <description><p>
 with error type TypeMismatchError, if any input parameter is not compatible with the expected type for that parameter.
                </p></description>
                <description><p>
 with error type SecurityError, if the application does not have the privilege to call this method.
                </p></description>
            </descriptive>
          </RaiseException>
        </Raises>
      </Operation>
    </Interface>
  </Module>
</Definitions>
