<?xml version="1.0" encoding="UTF-8" ?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
-->
<Module>
  <ModulePrefs title="gadgets.rpc Performance/correctness tests: gadget-in-a-gadget">
    <Require feature="rpc"/>
  </ModulePrefs>
  <Content type="html">
  <![CDATA[
    <script>
      function callGadgetServicePing() {
        gadgets.rpc.call(null, 'gadget_service_ping');
      }
    </script>
    <div>gadget-in-a-gadget</div><hr/>
    <div><input type="button" value="Ping Parent Gadget" onclick="callGadgetServicePing();" /></div>
  ]]>
  </Content>
</Module>
