chromium/chrome/test/data/extensions/platform_apps/web_view/component_extension/guest.html

<!doctype html>
<!--
Copyright 2014 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<html>
  <head>
    <script type="text/javascript">
      var targetExtensionId = 'ojlpikhmmlahaplmjphhfbbijkpgildg';

      var onPostMessageReceived = function(e) {
        var receiverIsComponent = e.data == 'to_component';
        var embedderWindowChannel = e.source;

        var finish = function(
            success, opt_guestProcessId, opt_guestRenderFrameRoutingId) {
          var data = {result: success ? 'SUCCESS' : 'FAILURE'};
          if (success) {
            data.guestProcessId = opt_guestProcessId;
            data.guestRenderFrameRoutingId = opt_guestRenderFrameRoutingId;
          }
          embedderWindowChannel.postMessage(JSON.stringify(data), '*');
        }

        // We're in a guest view, so need to get the chrome.runtime of the
        // parent window.
        var runtime = window.parent.chrome.runtime;
        if (!runtime) {
          finish(false);
          return;
        }

        // The message we send to the |targetExtensionId| ('abc') is arbitrary
        // and unused by the receiver extension.
        runtime.sendMessage(targetExtensionId, 'abc', null,
            function(response) {
          if (response.result === 'defined' && receiverIsComponent) {
            // MessageSender.guestProcessId should be defined if the receiver
            // extension is a component extension.
            finish(true, response.guestProcessId,
                   response.guestRenderFrameRoutingId);
          } else if (response.result === 'undefined' && !receiverIsComponent) {
            // MessageSender.guestProcessId should not be defined if the
            // receiver extension is not a component extension.
            finish(true);
          } else {
            finish(false);
          }
        });
      };
      addEventListener('message', onPostMessageReceived, false);
    </script>
  </head>
  <body>
    <div>This is a guest that sends a message to a component extension.</div>
    <script>
      window.console.log('Guest loaded');
    </script>
  </body>
</html>