(57)【要約】  本明細書は、コンピューティングシステム上の第1の実行コンテキストとコンピューティングシステム上の第2の実行コンテキストとの間でデータを通信するための技法を開示する。第1の実行コンテキストは、第1のオリジンからのコンテンツを実行することができ、第2の実行コンテキストは、第1のオリジンとは異なる第2のオリジンからのコンテンツを実行することができ、第1の実行コンテキストおよび第2の実行コンテキストは各々、コンピューティングシステムによって実施される同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限され得る。方法は、第1の実行コンテキストと第2の実行コンテキストとの間に双方向通信チャネルを確立することを含むことができる。
2019532384.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングシステム上の第1の実行コンテキストと前記コンピューティングシステム上の第2の実行コンテキストとの間でデータを通信するためのコンピュータ実装方法であって、
前記第1の実行コンテキストが、第1のオリジンからのコンテンツを実行し、
前記第2の実行コンテキストが、前記第1のオリジンとは異なる第2のオリジンからのコンテンツを実行し、
前記第1の実行コンテキストおよび前記第2の実行コンテキストは各々、前記コンピューティングシステムによって実施される同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限され、前記方法が、
前記第1の実行コンテキストと前記第2の実行コンテキストとの間に双方向通信チャネルを確立するステップであり、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された初期発見メッセージを受信するステップと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの識別子を決定するステップと、
前記第2の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第1の単方向サブチャネルを確立するステップであり、前記第1の単方向サブチャネルが、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成される、ステップと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信するステップと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された前記接続ブロードキャストメッセージに基づいて、前記第1の実行コンテキストの識別子を決定するステップと、
前記第1の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第2の単方向サブチャネルを確立するステップであり、前記第2の単方向サブチャネルが、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、ステップと
を含む、ステップと、
前記双方向通信チャネルを介して前記第1の実行コンテキストと前記第2の実行コンテキストとの間でメッセージを通信するステップと
を含むコンピュータ実装方法。
【請求項２】
前記同一オリジンポリシーに従って、前記コンピューティングシステムが、前記第1のオリジンおよび前記第2のオリジンの送信プロトコル、アドレス、またはポート番号のうちの少なくとも1つが互いに異なることを識別することに応答して、前記第2のオリジンを前記第1のオリジンと異なるものとして分類する、請求項1に記載のコンピュータ実装方法。
【請求項３】
前記第1の実行コンテキストが、前記第1のオリジンからの前記コンテンツを提示するように構成された第1のウィンドウオブジェクトを含み、前記第2の実行コンテキストが、前記第2のオリジンからの前記コンテンツを提示するように構成された第2のウィンドウオブジェクトを含む、請求項1または2に記載のコンピュータ実装方法。
【請求項４】
前記第1のウィンドウオブジェクトに提示された前記コンテンツが、前記第1のオリジンに関連付けられた第1のドメインにおいて1つまたは複数のサーバによってホストされる第1のウェブページを含み、
前記第2のウィンドウオブジェクトに提示された前記コンテンツが、前記第2のオリジンに関連付けられた第2のドメインにおいて1つまたは複数のサーバによってホストされる第2のウェブページを含み、
前記第2のウィンドウオブジェクトが、前記第1のウェブページに埋め込まれているインラインフレーム(iFrame)である
請求項3に記載のコンピュータ実装方法。
【請求項５】
前記コンピューティングシステムのウェブブラウジングアプリケーションにより前記第1の実行コンテキストおよび前記第2の実行コンテキストを生成するステップ
をさらに含み、前記第1の単方向サブチャネルが、前記ウェブブラウジングアプリケーションのpostMessageアプリケーションプログラミングインターフェース(API)を使用して、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成され、
前記第2の単方向サブチャネルが、前記ウェブブラウジングアプリケーションの前記postMessage APIを使用して、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される
請求項1〜4のいずれか一項に記載のコンピュータ実装方法。
【請求項６】
前記第2の実行コンテキストが、前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であり、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの前記識別子を決定するステップが、前記初期発見メッセージのソース識別子フィールドの値にアクセスするステップを含む
請求項1〜5のいずれか一項に記載のコンピュータ実装方法。
【請求項７】
前記第1および第2の単方向サブチャネルを確立した後、前記双方向通信チャネルを検証するステップをさらに含み、前記検証するステップが、
前記第2の実行コンテキストから前記第1の実行コンテキストに、第1のチャネル接続メッセージを送信するステップと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記第1のチャネル接続メッセージを受信するステップと、
第1のチャネル接続メッセージを受信したことに応答して、前記第1の実行コンテキストにおいて、前記双方向通信チャネルを接続状態にあるとマークするステップと、
前記第1の実行コンテキストから前記第2の実行コンテキストに、第2のチャネル接続メッセージを送信するステップと、
前記第2の実行コンテキストにおいて、前記第1の実行コンテキストから送信された前記第2のチャネル接続メッセージを受信するステップと、
前記第2のチャネル接続メッセージを受信したことに応答して、前記第2の実行コンテキストにおいて、前記双方向通信チャネルを接続状態にあるとマークするステップと
を含む、
請求項1〜6のいずれか一項に記載のコンピュータ実装方法。
【請求項８】
前記第1の実行コンテキスト内の1つまたは複数のサービスが、前記第1の単方向サブチャネルが前記接続状態にあると識別したことに応答して、前記双方向通信チャネルを使用して、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成され、
前記第1の実行コンテキスト内の前記1つまたは複数のサービスが、前記第1の単方向サブチャネルが未接続状態にあると識別したことに応答して、前記双方向通信チャネルを使用して前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するのではなく、代替動作を実行するように構成される
請求項7に記載のコンピュータ実装方法。
【請求項９】
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストが前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であるかどうかをチェックすることによって、前記第1の実行コンテキストが前記第2の実行コンテキストからの前記初期発見メッセージのターゲットであったかどうかを決定するステップと、
前記第2の実行コンテキストが前記第1の実行コンテキストの子孫であると識別したことに応答して、
(i)前記第1の実行コンテキストが前記第2の実行コンテキストからの前記初期発見メッセージのターゲットであったと決定し、前記第1の単方向サブチャネルを確立することに進むステップと、
(ii)前記第1の実行コンテキストと前記第2の実行コンテキストとの間に前記第1の単方向サブチャネルを確立することを選択するステップと
をさらに含む請求項1〜8のいずれか一項に記載のコンピュータ実装方法。
【請求項１０】
前記第1の実行コンテキストにおいて、前記第1のオリジン以外のオリジンからのコンテンツを実行する第3の実行コンテキストから送信された第2の初期発見メッセージを受信するステップであり、前記第1の実行コンテキストおよび前記第3の実行コンテキストが各々、前記コンピューティングシステムによって実施される前記同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限される、ステップと、
前記第1の実行コンテキストにおいて、前記第3の実行コンテキストが前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であるかどうかをチェックすることによって、前記第1の実行コンテキストが前記第3の実行コンテキストからの前記第2の初期発見メッセージのターゲットであったかどうかを決定するステップと、
前記第3の実行コンテキストが前記第1の実行コンテキストの子孫ではないと識別したことに応答して、前記第1の実行コンテキストと前記第3の実行コンテキストとの間に通信チャネルを確立しないように前記第2の初期発見メッセージを破棄するステップと
をさらに含む請求項1〜9のいずれか一項に記載のコンピュータ実装方法。
【請求項１１】
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストからの前記初期発見メッセージが前記第1の実行コンテキストと前記第2の実行コンテキストの第1のサービスとの間で第1のチャネルの確立を開始するためのものであることを示す第1のトークンを、前記初期発見メッセージが含むことを識別するステップと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された第2の初期発見メッセージを受信するステップと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストからの前記第2の初期発見メッセージが前記第1の実行コンテキストと、前記第2の実行コンテキストの前記第1のサービスとは異なる前記第2の実行コンテキストの第2のサービスとの間で第2のチャネルの確立を開始するためのものであることを示す第2のトークンを、前記第2の初期発見メッセージが含むことを識別するステップと
をさらに含む請求項1〜10のいずれか一項に記載のコンピュータ実装方法。
【請求項１２】
前記第1の実行コンテキストと前記第2の実行コンテキストとの間に前記双方向通信チャネルを確立した後、
前記第1の実行コンテキストの提示内に表示された制御要素とのユーザ対話を識別するステップと、
前記第1の実行コンテキストの前記提示内に表示された前記制御要素との前記ユーザ対話を識別したことに応答して、前記第1の実行コンテキストから前記第2の実行コンテキストへの前記双方向通信チャネルを介して、前記第1の実行コンテキストの前記提示内に表示された前記制御要素との前記ユーザ対話の指示を送信するステップと
を含む請求項1〜11のいずれか一項に記載のコンピュータ実装方法。
【請求項１３】
前記第1の実行コンテキストの前記提示内に表示された前記制御要素との前記ユーザ対話が、前記第2の実行コンテキストによって実行された前記コンテンツの提示を隠すまたは閉じるための命令を示す、請求項12に記載のコンピュータ実装方法。
【請求項１４】
1つまたは複数のプロセッサと、1つまたは複数のコンピュータ可読媒体とを含むコンピューティングシステムであって、前記1つまたは複数のコンピュータ可読媒体は、実行されると、前記1つまたは複数のプロセッサに、
第1のオリジンからのコンテンツを実行する第1の実行コンテキストと、
前記第1のオリジンとは異なる第2のオリジンからのコンテンツを実行する第2の実行コンテキストと、
セキュリティアプリケーションによって実施される同一オリジンポリシーに従って、前記第1の実行コンテキストおよび前記第2の実行コンテキストの各々が他方のデータにアクセスすることを制限するセキュリティアプリケーションと
を実施させる命令で符号化され、前記第1の実行コンテキストおよび前記第2の実行コンテキストが、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された初期発見メッセージを受信することと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの識別子を決定することと、
前記第2の実行コンテキストの前記識別子を使用して、双方向通信チャネルの第1の単方向サブチャネルを確立することであり、前記第1の単方向サブチャネルが、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成される、確立することと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信することと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された前記接続ブロードキャストメッセージに基づいて、前記第1の実行コンテキストの識別子を決定することと、
前記第1の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第2の単方向サブチャネルを確立することであり、前記第2の単方向サブチャネルが、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、確立することと
を含む動作を実行することによって、前記第1の実行コンテキストと前記第2の実行コンテキストとの間でメッセージを搬送するための前記双方向通信チャネルを確立するように構成される、
コンピューティングシステム。
【請求項１５】
前記動作が、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストが前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であるかどうかをチェックすることによって、前記第1の実行コンテキストが前記第2の実行コンテキストからの前記初期発見メッセージのターゲットであったかどうかを決定することと、
前記第2の実行コンテキストが前記第1の実行コンテキストの子孫であると識別したことに応答して、
(i)前記第1の実行コンテキストが前記第2の実行コンテキストからの前記初期発見メッセージのターゲットであったと決定し、前記第1の単方向サブチャネルを確立することに進むことと、
(ii)前記第1の実行コンテキストと前記第2の実行コンテキストとの間に前記第1の単方向サブチャネルを確立することを選択することと
をさらに含む請求項14に記載のコンピューティングシステム。
【請求項１６】
前記動作が、
前記第1の実行コンテキストにおいて、前記第1のオリジン以外のオリジンからのコンテンツを実行する第3の実行コンテキストから送信された第2の初期発見メッセージを受信することであり、前記第1の実行コンテキストおよび前記第3の実行コンテキストが各々、前記コンピューティングシステムによって実施される前記同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限される、受信することと、
前記第1の実行コンテキストにおいて、前記第3の実行コンテキストが前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であるかどうかをチェックすることによって、前記第1の実行コンテキストが前記第3の実行コンテキストからの前記第2の初期発見メッセージのターゲットであったかどうかを決定することと、
前記第3の実行コンテキストが前記第1の実行コンテキストの子孫ではないと識別したことに応答して、前記第1の実行コンテキストと前記第3の実行コンテキストとの間に通信チャネルを確立しないように前記第2の初期発見メッセージを破棄することと
をさらに含む請求項14または15に記載のコンピューティングシステム。
【請求項１７】
前記動作が、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストからの前記初期発見メッセージが前記第1の実行コンテキストと前記第2の実行コンテキストの第1のサービスとの間で第1のチャネルの確立を開始するためのものであることを示す第1のトークンを、前記初期発見メッセージが含むことを識別することと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された第2の初期発見メッセージを受信することと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストからの前記第2の初期発見メッセージが前記第1の実行コンテキストと、前記第2の実行コンテキストの前記第1のサービスとは異なる前記第2の実行コンテキストの第2のサービスとの間で第2のチャネルの確立を開始するためのものであることを示す第2のトークンを、前記第2の初期発見メッセージが含むことを識別することと
をさらに含む請求項14〜16のいずれか一項に記載のコンピューティングシステム。
【請求項１８】
コンピューティングシステムの1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、前記コンピューティングシステム上の第1の実行コンテキストと前記コンピューティングシステム上の第2の実行コンテキストとの間でデータを通信するための動作を実行させる命令を記憶した1つまたは複数の非一時的コンピュータ可読媒体であって、
前記第1の実行コンテキストが、第1のオリジンからのコンテンツを実行するように構成され、
前記第2の実行コンテキストが、前記第1のオリジンとは異なる第2のオリジンからのコンテンツを実行するように構成され、
前記第1の実行コンテキストおよび前記第2の実行コンテキストが各々、前記コンピューティングシステムの同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限され、前記動作が、
前記第1の実行コンテキストと前記第2の実行コンテキストとの間に双方向通信チャネルを確立することであり、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された初期発見メッセージを受信することと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの識別子を決定することと、
前記第2の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第1の単方向サブチャネルを確立することであり、前記第1の単方向サブチャネルが、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成される、確立することと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信することと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された前記接続ブロードキャストメッセージに基づいて、前記第1の実行コンテキストの識別子を決定することと、
前記第1の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第2の単方向サブチャネルを確立することであり、前記第2の単方向サブチャネルが、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、確立することと
を含む、確立することと、
前記双方向通信チャネルを介して前記第1の実行コンテキストと前記第2の実行コンテキストとの間でメッセージを通信することと
を含む
非一時的コンピュータ可読媒体。
【請求項１９】
前記同一オリジンポリシーに従って、前記コンピューティングシステムが、前記第1のオリジンおよび前記第2のオリジンの送信プロトコル、アドレス、またはポート番号のうちの少なくとも1つが互いに異なることを識別することに応答して、前記第2のオリジンを前記第1のオリジンと異なるものとして分類する、請求項18に記載のコンピュータ可読媒体。
【請求項２０】
前記第1の実行コンテキストが、前記第1のオリジンからの前記コンテンツを提示するように構成された第1のウィンドウオブジェクトを含み、前記第2の実行コンテキストが、前記第2のオリジンからの前記コンテンツを提示するように構成された第2のウィンドウオブジェクトを含む、請求項18または19に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、一般に、ウェブブラウザ内の異なるウィンドウ間など、コンピューティングシステム上の別々の実行コンテキスト間で通信するための技法に関する。
【背景技術】
【０００２】
サーバおよびコンピューティングデバイスのハードウェアおよびソフトウェア機能の進歩は一様に、ますます洗練されたウェブページ、アプリケーションインターフェース、および他の電子文書をもたらした。たとえば、一部のウェブページは、複数のソースからのコンテンツを統合して、ユーザが他のウェブサイトに繰り返しナビゲートし、元のウェブページに戻る必要を低減する。例として、ウェブページは、ウェブページのプライマリコンテンツを提供する最上位ドキュメントと、最上位ドキュメントに他のコンテンツを埋め込む1つまたは複数のiFrame(マップサーバまたはナビゲーションサーバからのコンテンツなど)を含み得る。いくつかの場合には、埋込みドキュメントは、それらの最上位ドキュメントが取得されたドメインとは異なるドメインから取得され、したがって、異なるオリジンを有すると言わる。
【０００３】
異なるオリジンのドキュメントは、コンピューティングシステムにセキュリティ脅威をもたらす可能性がある。たとえば、第1のオリジンからのドキュメントは、たとえば他のドキュメントにさらなる悪意のあるコードを入れることによって、他のドキュメントのドキュメントオブジェクトモデル(DOM)を検査する、またはそれに対して許可されていない変更を加えることによって、他のドキュメントから個人情報を廃棄することによって、または他のドキュメントとのユーザ対話を監視することによって、第2のオリジンからのドキュメントを危険にさらすように設計された悪意のあるプログラムを搬送する可能性がある。したがって、異なるオリジンからのドキュメントを一般的に実行するウェブブラウザおよび他のアプリケーションは、多くの形態のクロスオリジンドキュメントの対話を制限する同一オリジンポリシーを実装している。たとえば、ブラウザは、第1のウィンドウに表示されている第1のドメインからのウェブページが、第2のウィンドウに表示されている第2のドメインからの別のウェブページに関連するデータにアクセスするのを防ぎ得る。異なるソースからのデータの整合性および機密性を保護するために、同一オリジンポリシーが開発された。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書は、クロスオリジン実行コンテキスト間に安全な通信チャネルを提供するためのコンピュータベースのシステム、方法、デバイス、および他の技法について説明する。いくつかの実装形態では、クロスオリジン実行コンテキスト間の双方向通信チャネルを適用して、プライマリウェブページなどの最上位ドキュメント、およびプライマリウェブページにネストされた1つまたは複数のiFrame内に表示されたセカンダリコンテンツを含む1つまたは複数の埋込みドキュメントのための統合されたユーザインターフェースを作成することができる。
【０００５】
本明細書に開示される主題のいくつかの実装形態は、コンピューティングシステム上の第1の実行コンテキストとコンピューティングシステム上の第2の実行コンテキストとの間でデータを通信するためのコンピュータ実装方法を含む。第1の実行コンテキストは、第1のオリジンからのコンテンツを実行することができ、第2の実行コンテキストは、第1のオリジンとは異なる第2のオリジンからのコンテンツを実行することができ、第1の実行コンテキストおよび第2の実行コンテキストは各々、コンピューティングシステムによって実施される同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限され得る。方法は、第1の実行コンテキストと第2の実行コンテキストとの間に双方向通信チャネルを確立するステップであり、第1の実行コンテキストにおいて、第2の実行コンテキストから送信された初期発見メッセージを受信するステップと、第1の実行コンテキストにおいて、第2の実行コンテキストから送信された初期発見メッセージに基づいて、第2の実行コンテキストの識別子を決定するステップと、第2の実行コンテキストの識別子を使用して、双方向通信チャネルの第1の単方向サブチャネルを確立するステップであり、第1の単方向サブチャネルが、第1の実行コンテキストから第2の実行コンテキストにメッセージを搬送するように構成される、ステップと、第2の実行コンテキストにおいて、第1の単方向サブチャネルを介して第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信するステップと、第2の実行コンテキストにおいて、第1の単方向サブチャネルを介して第1の実行コンテキストから送信された接続ブロードキャストメッセージに基づいて、第1の実行コンテキストの識別子を決定するステップと、第1の実行コンテキストの識別子を使用して、双方向通信チャネルの第2の単方向サブチャネルを確立するステップであり、第2の単方向サブチャネルが、第2の実行コンテキストから第1の実行コンテキストにメッセージを搬送するように構成される、ステップとを含む、ステップと、双方向通信チャネルを介して第1の実行コンテキストと第2の実行コンテキストとの間でメッセージを通信するステップとを含むことができる。
【０００６】
これらおよび他の実装形態は、以下の特徴のうちの1つまたは複数を、随意に含むことができる。
【０００７】
同一オリジンポリシーに従って、コンピューティングシステムは、第1のオリジンおよび第2のオリジンの送信プロトコル、アドレス、またはポート番号のうちの少なくとも1つが互いに異なることを識別することに応答して、第2のオリジンを第1のオリジンと異なるものとして分類することができる。
【０００８】
第1の実行コンテキストは、第1のオリジンからのコンテンツを提示するように構成された第1のウィンドウオブジェクトを含むことができ、第2の実行コンテキストは、第2のオリジンからのコンテンツを提示するように構成された第2のウィンドウオブジェクトを含む。
【０００９】
第1のウィンドウオブジェクトに提示されたコンテンツは、第1のオリジンに関連付けられた第1のドメインにおいて1つまたは複数のサーバによってホストされる第1のウェブページを含むことができる。第2のウィンドウオブジェクトに提示されたコンテンツは、第2のオリジンに関連付けられた第2のドメインにおいて1つまたは複数のサーバによってホストされる第2のウェブページを含むことができる。第2のウィンドウオブジェクトは、第1のウェブページに埋め込まれているインラインフレーム(iFrame)とすることができる。
【００１０】
動作は、コンピューティングシステムのウェブブラウジングアプリケーションにより第1の実行コンテキストおよび第2の実行コンテキストを生成することをさらに含むことができ、第1の単方向サブチャネルは、ウェブブラウジングアプリケーションのpostMessageアプリケーションプログラミングインターフェース(API)を使用して、第1の実行コンテキストから第2の実行コンテキストにメッセージを搬送するように構成され、第2の単方向サブチャネルは、ウェブブラウジングアプリケーションのpostMessage APIを使用して、第2の実行コンテキストから第1の実行コンテキストにメッセージを搬送するように構成される。
【００１１】
第2の実行コンテキストは、コンピューティングシステム上の実行コンテキストの階層における第1の実行コンテキストの子孫とすることができる。第1の実行コンテキストにおいて、第2の実行コンテキストから送信された初期発見メッセージに基づいて、第2の実行コンテキストの識別子を決定することは、初期発見メッセージのソース識別子フィールドの値にアクセスすることを含むことができる。
【００１２】
第1および第2の単方向サブチャネルを確立した後、第2の実行コンテキストから第1の実行コンテキストに、第1のチャネル接続メッセージを送信し、第1の実行コンテキストにおいて、第2の実行コンテキストから送信された第1のチャネル接続メッセージを受信し、第1のチャネル接続メッセージを受信したことに応答して、第1の実行コンテキストにおいて、双方向通信チャネルを接続状態にあるとマークし、第1の実行コンテキストから第2の実行コンテキストに、第2のチャネル接続メッセージを送信し、第2の実行コンテキストにおいて、第1の実行コンテキストから送信された第2のチャネル接続メッセージを受信し、第2のチャネル接続メッセージを受信したことに応答して、第2の実行コンテキストにおいて、双方向通信チャネルを接続状態にあるとマークすることによって、双方向通信チャネルを検証する(validate)ことができる。
【００１３】
第1の実行コンテキスト内の1つまたは複数のサービスは、第1の単方向サブチャネルが接続状態にあると識別したことに応答して、双方向通信チャネルを使用して、第1の実行コンテキストから第2の実行コンテキストにメッセージを搬送するように構成できる。第1の実行コンテキスト内の1つまたは複数のサービスは、第1の単方向サブチャネルが未接続状態にあると識別したことに応答して、双方向通信チャネルを使用して第1の実行コンテキストから第2の実行コンテキストにメッセージを搬送するのではなく、代替動作を実行するように構成できる。
【００１４】
動作は、第1の実行コンテキストにおいて、第2の実行コンテキストがコンピューティングシステム上の実行コンテキストの階層における第1の実行コンテキストの子孫であるかどうかをチェックすることによって、第1の実行コンテキストが第2の実行コンテキストからの初期発見メッセージのターゲットであったかどうかを決定することと、第2の実行コンテキストが第1の実行コンテキストの子孫であると識別したことに応答して、(i)第1の実行コンテキストが第2の実行コンテキストからの初期発見メッセージのターゲットであったと決定し、第1の単方向サブチャネルを確立することに進むことと、(ii)第1の実行コンテキストと第2の実行コンテキストとの間に第1の単方向サブチャネルを確立することを選択することとをさらに含むことができる。
【００１５】
動作は、第1の実行コンテキストにおいて、第1のオリジン以外のオリジンからのコンテンツを実行する第3の実行コンテキストから送信された第2の初期発見メッセージを受信することであり、第1の実行コンテキストおよび第3の実行コンテキストは各々、コンピューティングシステムによって実施される同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限される、受信することと、第1の実行コンテキストにおいて、第3の実行コンテキストがコンピューティングシステム上の実行コンテキストの階層における第1の実行コンテキストの子孫であるかどうかをチェックすることによって、第1の実行コンテキストが第3の実行コンテキストからの第2の初期発見メッセージのターゲットであったかどうかを決定することと、第3の実行コンテキストが第1の実行コンテキストの子孫ではないと識別したことに応答して、第1の実行コンテキストと第3の実行コンテキストとの間に通信チャネルを確立しないように第2の初期発見メッセージを破棄することとをさらに含むことができる。
【００１６】
動作は、第1の実行コンテキストにおいて、第2の実行コンテキストからの初期発見メッセージが第1の実行コンテキストと第2の実行コンテキストの第1のサービスとの間で第1のチャネルの確立を開始するためのものであることを示す第1のトークンを、初期発見メッセージが含むことを識別することと、第1の実行コンテキストにおいて、第2の実行コンテキストから送信された第2の初期発見メッセージを受信することと、第1の実行コンテキストにおいて、第2の実行コンテキストからの第2の初期発見メッセージが第1の実行コンテキストと、第2の実行コンテキストの第1のサービスとは異なる第2の実行コンテキストの第2のサービスとの間で第2のチャネルの確立を開始するためのものであることを示す第2のトークンを、第2の初期発見メッセージが含むことを識別することとをさらに含むことができる。
【００１７】
動作は、第1の実行コンテキストと第2の実行コンテキストとの間に双方向通信チャネルを確立した後、第1の実行コンテキストの提示内に表示された制御要素とのユーザ対話を識別することと、第1の実行コンテキストの提示内に表示された制御要素とのユーザ対話を識別したことに応答して、第1の実行コンテキストから第2の実行コンテキストへの双方向通信チャネルを介して、第1の実行コンテキストの提示内に表示された制御要素とのユーザ対話の指示を送信することとをさらに含むことができる。
【００１８】
第1の実行コンテキストの提示内に表示された制御要素とのユーザ対話は、第2の実行コンテキストによって実行されたコンテンツの提示を隠すまたは閉じるための命令を示す。
【００１９】
本明細書に開示される主題のいくつかの実装形態は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、本明細書に記載の任意の実装形態による方法を実行させる命令を記憶する1つまたは複数のコンピュータ可読媒体を含む。
【００２０】
本明細書に開示される主題のいくつかの実装形態は、1つまたは複数のプロセッサと1つまたは複数のコンピュータ可読媒体とを含むコンピューティングシステムを含む。
【００２１】
本明細書で開示される主題のいくつかの実装形態は、1つまたは複数のプロセッサと、1つまたは複数のコンピュータ可読媒体とを有するコンピューティングシステムを含み、1つまたは複数のコンピュータ可読媒体は、実行されると、1つまたは複数のプロセッサに、第1のオリジンからのコンテンツを実行する第1の実行コンテキストと、第1のオリジンとは異なる第2のオリジンからのコンテンツを実行する第2の実行コンテキストと、セキュリティアプリケーションによって実施される同一オリジンポリシーに従って、第1の実行コンテキストおよび第2の実行コンテキストの各々が他方のデータにアクセスすることを制限するセキュリティアプリケーションとを実施させる命令で符号化される。第1の実行コンテキストおよび第2の実行コンテキストは、第1の実行コンテキストにおいて、第2の実行コンテキストから送信された初期発見メッセージを受信することと、第1の実行コンテキストにおいて、第2の実行コンテキストから送信された初期発見メッセージに基づいて、第2の実行コンテキストの識別子を決定することと、第2の実行コンテキストの識別子を使用して、双方向通信チャネルの第1の単方向サブチャネルを確立することであり、第1の単方向サブチャネルが、第1の実行コンテキストから第2の実行コンテキストにメッセージを搬送するように構成される、確立することと、第2の実行コンテキストにおいて、第1の単方向サブチャネルを介して第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信することと、第2の実行コンテキストにおいて、第1の単方向サブチャネルを介して第1の実行コンテキストから送信された接続ブロードキャストメッセージに基づいて、第1の実行コンテキストの識別子を決定することと、第1の実行コンテキストの識別子を使用して、双方向通信チャネルの第2の単方向サブチャネルを確立することであり、第2の単方向サブチャネルが、第2の実行コンテキストから第1の実行コンテキストにメッセージを搬送するように構成される、確立することとを含む動作を実行することによって、第1の実行コンテキストと第2の実行コンテキストとの間でメッセージを搬送するための双方向通信チャネルを確立するように構成される。
【００２２】
本明細書に開示される主題の実装形態は、いくつかの事例では、以下の利点のうちの1つまたは複数を実現し得る。同一オリジンのセキュリティ要件を回避することなく、コンピュータ環境における実行コンテキスト間のクロスオリジン通信を容易にする通信チャネルを確立することができる。チャネルを確立し、確認して(verify)、そのチャネルを1つまたは複数のサービスによって確実に使用できるようにすることができる。いくつかの実装形態では、クロスオリジン通信チャネルによって提供される通信によって、2つ以上の実行コンテキストは、実行コンテキストが様々なオリジンに関連付けられている場合でも、1つのコンテキストにおいて行われるイベントが1つまたは複数の他のコンテキストにおけるイベントをトリガする、またはそれに影響を与えることができる統合されたインターフェースを提供することができる。たとえば、ユーザインターフェースの第1の部分は、ウェブページのiFrame内に提示されてもよく、最上位ウェブページ内の1つまたは複数の制御は、iFrame内の応答を呼び出すためにユーザによって選択されてもよい。これは、ユーザがウェブページから移動する必要性を回避し、ネットワークトラフィックが低減する。いくつかの実装形態では、本明細書で開示される通信チャネルを確立するための技法は、チャネルのエンドポイントを定義することができるように、クロスオリジン実行コンテキストが互いに発見することを可能にする。本開示全体に照らして、さらなる特徴および利点が当業者によって認識されよう。
【図面の簡単な説明】
【００２３】
【図１】ウェブブラウジングアプリケーションのウィンドウに埋込みコンテンツフレームが提示された例示的なウェブページを示す図である。
【図２】例示的なドキュメントおよび埋込みコンテンツフレームのブロック図である。
【図３】複数の埋込みコンテンツフレームを含むドキュメントのブロック図である。
【図４】同一オリジンポリシーを実施する環境においてクロスオリジン実行コンテキスト間に双方向通信チャネルを作成し、使用するための例示的なプロセスのフローチャートである。
【図５】クロスオリジン実行コンテキスト間に双方向通信チャネルを確立するための例示的なプロセスのスイムレーン図である。
【図６】複数の埋込みコンテンツフレームを含む電子ドキュメントのためのクロスオリジン双方向通信チャネルを確立するための例示的なプロセスのスイムレーン図である。
【図７】実行コンテキストにおける複数のサービスのために双方向通信チャネルを多重化するための例示的なプロセスのスイムレーン図である。
【図８】本明細書に記載の技法を実施するために使用することができるコンピューティングデバイスおよびモバイルコンピューティングデバイスの一例を示す図である。
【発明を実施するための形態】
【００２４】
様々な図面における同様の参照符号は、同様の要素を示す。
【００２５】
本明細書は、クロスオリジン実行コンテキスト間の通信を確立するためのコンピュータベースのシステム、方法、デバイス、および他の技法について説明する。いくつかの実装形態では、プライマリウェブページとセカンダリウェブページとが異なるオリジンを有する場合であっても、インラインフレーム(iFrame)を介して、プライマリウェブページと、プライマリウェブページに埋め込まれたセカンダリウェブページとの間に双方向通信を確立するために技法を適用できる。双方向通信チャネルが確立されると、2つのウェブページ内のスクリプトが、そのチャネルを利用して、オリジンの境界線を超える様々なサービスを実装することができる。たとえば、ユーザがプライマリウェブページ内の要素上をクリックすると、プライマリページからのスクリプトは、クリックイベントについてセカンダリページの実行コンテキストに警告する可能性がある。セカンダリページからのハンドラスクリプトは、次いで、クリックイベントに応答してプログラムされたルーチンを実行し得る。したがって、クロスオリジン実行コンテキスト間の双方向通信チャネルは、埋め込まれたコンテンツが、別のコンテナに埋め込まれるのではなく、真にプライマリウェブページの一部であるかのようにユーザに見えるように、シームレスなユーザエクスペリエンスを容易にする。
【００２６】
一般に、実行コンテキストは、スクリプト、ウェブページ、ワークシート、または別のドキュメントなど特定のコンテンツアイテムを実行するための専用のコンピューティングプロセスである。システムは、アプリケーション内で開かれる各ウィンドウについてそれぞれの実行コンテキストを作成し得、各ウィンドウは、異なるコンテンツアイテムを提示する。システム(たとえば、オペレーティングシステム、またはコンピューティングシステム上のアプリケーション)は、1つの実行コンテキストにおいて行われるイベントが他の同時に実行中の実行コンテキストに影響を与えないように、実行コンテキストを互いに別々に維持し得る。たとえば、ユーザが第1の実行コンテキストを有する第1のウェブページをリフレッシュするとき、同じブラウザ内で開かれている他のウェブページは別々の実行コンテキストで維持されるので、リフレッシュイベントはそれらに直接影響を及ぼさない可能性がある。さらに、同一オリジンポリシーを実施するコンピューティングシステムでは、異なるオリジンからのコンテンツアイテムの実行コンテキストは、互いに対話することをさらに制限される可能性がある。システムは、同じオリジンを有するコンテンツアイテムの実行コンテキスト内のスクリプトが、互いに管理されているデータと対話し、それに自由にアクセスできるようにし得るが、同一オリジンポリシーは、クロスオリジン実行コンテキストからのスクリプトが、互いに管理されているデータと同様に対話したりアクセスしたりすることを制限し得る。
【００２７】
次に図1を参照すると、ウェブブラウジングアプリケーションのウィンドウ100内に提示された例示的なウェブページ102の図が示されている。ウェブページ102は、ヘッドライン「例示的なウェブサイト」およびテキストの列などの様々なプライマリコンテンツを含む。ウェブページ102は、第1のオリジンからのものであり、第1のオリジンは、ウェブページ102のユニバーサルリソースロケータ(URL)、http://www.firstorigindomainexample.com/home.htmによって少なくとも部分的に表される。いくつかの実装形態では、オリジンは、(i)URI方式またはプロトコル(たとえば、http対ftp対https)、(ii)ホスト名、および(iii)ポートを含む情報のタプルによって定義される。2タプル内のいずれかの情報が一致しない場合、そのタプルによって定義されたオリジンは異なると見なされる。より一般的な実装では、「オリジン」は、The Internet Engineering Task Force (IETF) Request for Comments (RFC) 6454  "The Web origin Content"において指定された手順に従って決定されてもよい。
【００２８】
ウェブページ102のプライマリコンテンツは、専用の実行プロセスにおいてブラウザによって実行されてもよい。ウェブページ102は、ブラウザウィンドウ100内に提示されるので、プライマリウェブページ102の実行プロセスも、ウェブページ102が提示されるウィンドウ100に対応する。
【００２９】
ウェブページ102のプライマリコンテンツに加えて、ウェブページ102は、埋込みコンテンツフレーム104aおよび104bも含む。第1の埋込みコンテンツフレーム104aは、第2のオリジンからのセカンダリコンテンツを提示し、第2の埋込みコンテンツフレーム104bは、第3のオリジンから取得されたセカンダリコンテンツを提示する。いくつかの実装形態では、コンテンツフレーム104aおよび104bは各々、1つまたは複数のiFrameによって定義され、各iFrameには、それ自体の実行コンテキストが提供され得る。コンテンツフレーム104aおよび104bのような例示的な埋込みコンテンツフレームのアーキテクチャは、図2に関してさらに詳細に説明される。ウェブブラウザアプリケーションによって実施される同一オリジンポリシー、ならびに最上位ウェブページ102の異なるオリジンおよび埋込みコンテンツフレーム104aおよび104bに提示されるコンテンツの結果として、ウェブページ102のそれぞれの実行コンテキストおよび埋め込まれたコンテンツは、互いとのいくつかの対話および/または互いのデータへのアクセスから制限され得る。ドキュメントに関連付けられたデータ(またはドキュメントの実行コンテキスト)は、たとえば、ドキュメントのドキュメントオブジェクトモデル(DOM)、ドキュメントとのユーザ対話の指示、ドキュメントプロパティ、またはこれらと他のデータの組合せを含み得る。たとえば、第1のオリジンからの第1のウェブページ内のスクリプトは、同じオリジンからの第2のウェブページのDOMを検査し、修正すること、または第2のウェブページにおいて行われるイベントについてのリスナーを設定することが可能になり得る。対照的に、同一オリジンポリシーの結果として、第1のオリジンからの第1のウェブページ内のスクリプトは、異なるオリジンからの第2のウェブページのDOMを検査または変更すること、あるいは第2のウェブページにおいて行われるイベントについてのリスナーを設定することが妨げられる可能性がある。
【００３０】
いくつかの実装形態では、実行されると、ブラウザに、フレームをウェブページに動的に挿入させ、1つまたは複数のセカンダリコンテンツアイテムにフレーム内に提示するよう要求させるスクリプトまたは他のコンピュータコードを最上位ページに入れることによって、セカンダリコンテンツを提示するためのコンテンツフレームを最上位ウェブページに埋め込むことができる。セカンダリコンテンツアイテムは、最上位ウェブページのものとは異なるオリジンから取り出されてもよい。たとえば、最上位ウェブページ102は、コンテンツ提供ネットワークからのセカンダリコンテンツを表示することに同意した発行者のための第1のウェブドメイン(たとえば、第1のオリジン)から取得されてもよい。次いで、第1の埋込みコンテンツフレーム104a内のスクリプトは、コンテンツ提供ネットワークを呼び出して、フレーム104a内に表示するためのセカンダリコンテンツアイテム(たとえば、ユーザの場所の天気データ、マップサーバまたはナビゲーションサーバからのマップ、または別のコンテンツアイテム)を取得し得る。同様に、第2の埋込みコンテンツフレーム104b内のスクリプトも、コンテンツ提供ネットワークを呼び出して、フレーム104b内に表示するための別のセカンダリコンテンツアイテムを取り出し得る。
【００３１】
いくつかの実装形態では、双方向通信チャネルを、異なるオリジンに関連付けられた実行コンテキスト間に確立することができる。そのようなチャネルがどのように確立され得るかの詳細は、図4〜図7に関して説明される。有利には、双方向通信チャネルは、クロスオリジン実行コンテキストからのスクリプトが互いの間でメッセージを送信し、クロスオリジンの対話を含む一連のランタイムサービスを実装することを可能にすることができる。たとえば、イベントリスナーを、第1の実行コンテキストに設定することができる。イベントリスナーが所定のイベントの発生を検出すると、リスナーは、双方向チャネルを使用して、イベントの発生を第2の実行コンテキストに警告するハンドラを呼び出し得る。次いで、第2の実行コンテキスト内のリスナーは、双方向チャネルを介して肯定応答およびさらなるメッセージを第1の実行コンテキストに返送することを含む、任意の適切な方法で通知を処理し得る。
【００３２】
いくつかの実装形態では、最上位ウェブページ102ならびに埋込みコンテンツフレーム104aおよび104bなどクロスオリジン実行コンテキスト間に統合されたユーザインターフェースを作成するために、双方向通信チャネルを使用することができる。双方向チャネルを介して送信されたメッセージに基づいて、最上位ウェブページ102が埋込みコンテンツフレーム104aまたは104b内のイベントに応答してもよく、その逆も同様である。たとえば、最上位ウェブページ102は、ユーザインターフェース要素106aおよび106bを含み得る。要素106aおよび106bは、それらの対応する埋込みコンテンツフレーム104aおよび104bにそれぞれ隣接し、しかし、その外側に表示される。要素106aおよび106bは、最上位ページ102に設けられ、埋込みコンテンツフレーム104aおよび104bの外部にあるので、ブラウザの同一オリジンポリシーは、通常、これらの要素が埋込みフレーム104aおよび104b内の動作を制御することを制限し得る。しかしながら、本明細書に開示された技法のうちの1つに従って双方向通信チャネルがクロスオリジン実行コンテキスト間に確立されると、最上位ウェブページ102内の要素106aまたは106bとの対話は、それぞれ、埋込みコンテンツフレーム104aまたは104b内の応答をトリガし得る。
【００３３】
たとえば、リスナーは、ユーザが要素106aをいつ選択した(たとえば、クリックした)かを識別するために最上位ウェブページ102に設定されてもよい。要素106aの選択が検出されると、最上位ウェブページ102内のハンドラスクリプトは、以前に確立された双方向通信チャネルを介してメッセージを送信し得、これは、次いで、埋込みコンテンツフレーム104a内のリスナーによって検出される。埋込みコンテンツフレーム104aからのハンドラスクリプトは、次いで、要素106aのユーザの選択に応答して、たとえば、コンテンツフレーム104aを閉じる、コンテンツフレーム104aに表示されるコンテンツを更新する、コンテンツフレーム104a内のメディアアイテムを再生する、または一時停止する、コンテンツフレーム104aに最近表示されたコンテンツに関する質問を求めるユーザに対する調査を生成する、最上位ウェブページ102の状態に関する追加情報を要求する、アクション(たとえば、最上位ウェブページ102からコンテンツフレーム104aを閉じること、新しい埋込みコンテンツフレームまたはポップアップウィンドウを生成すること)を実行するように最上位ウェブページ102に命令を提供する、またはこれらおよび他の動作の組合せなど、1つまたは複数の動作を実行し得る。
【００３４】
いくつかの実装形態では、本明細書に開示されている技法は、ウェブブラウザ環境の外側でクロスオリジン実行コンテキスト間に双方向通信チャネルを確立するために実行され得る。たとえば、異なるオリジンに関連付けられた別々の実行コンテキストで維持されるコンピューティングデバイス上のアプリケーションまたはオペレーティングシステムの任意の2つのウィンドウまたはユーザインターフェースは、本明細書で開示される技法に従って双方向通信チャネルを確立し得る。
【００３５】
図2は、例示的なドキュメント200および埋込みコンテンツフレーム201のブロック図を示す。ドキュメント200は、たとえば、ウェブページ、またはコンピューティングデバイス上のネイティブアプリケーションのインターフェースとすることができる。いくつかの実装形態では、ドキュメント200は、少なくともいくつかのアイテムが異なるオリジンを有するコンテンツアイテムの階層から形成される。たとえば、発行者のウェブサイトは、発行者からのプライマリコンテンツを表示する最上位ページと、サードパーティのコンテンツプロバイダからのセカンダリコンテンツを表示する階層の下位にある1つまたは複数の子孫コンテンツアイテムを含み得る。子孫コンテンツアイテムは、たとえば、埋込みコンテンツフレーム内に提供される。一般に、子孫コンテンツアイテムは、より高いレベル(たとえば、親または他の祖先)の実行コンテキストまたはコンテナの下にネストされている実行コンテキストまたはコンテナにおいて提供されるコンテンツアイテムとして理解することができる。
【００３６】
ドキュメント200は、コンピューティングデバイス上のアプリケーション(たとえば、ウェブブラウザ)によって実行することができる。いくつかの実装形態では、アプリケーションは、コンテナ内のドキュメント200のアイテムの階層から個々のコンテンツアイテムまたはコンテンツアイテムのグループを提示する。コンテナは、たとえば、ウェブブラウザ内のタブまたは上位レベルのコンテンツアイテムに埋め込まれたiFrameなどのウィンドウオブジェクトであり得る。ドキュメント200が実行されると、アプリケーションは、各コンテナについてのそれぞれの実行コンテキストを作成し、ここで、所与のコンテナの実行コンテキストは、コンテナに提示された対応するコンテンツアイテムを実行する。たとえば、最上位ウェブページは、ブラウズアプリケーションのメインウィンドウに提示され、埋込みコンテンツアイテムは、アプリケーションのメインウィンドウ内にネストされたiFrameに提示され得る。ブラウザは、メインウィンドウに提示された最上位ウェブページのための第1の実行コンテキスト、最上位ページに埋め込まれ、外側iFrameに提示された子コンテンツアイテムのための第2の実行コンテキスト、および子コンテンツアイテムに埋め込まれ、外側iFrame内にネストされた内側iFrameに提示された孫コンテンツアイテムのための第3の実行コンテキストを作成し得る。
【００３７】
図2に示すように、例示的なドキュメント200は、一連のネストされたコンテナを含む。最上位コンテナ203は、ドキュメント200のプラアイマリコンテンツアイテムを提示する。次いで、埋込みコンテンツフレーム201は、階層内のプライマリアイテムの下のコンテンツアイテムについての2つの低位コンテナを含む。たとえば、埋込みコンテンツフレーム201は、最上位コンテナ203内に直接ネストされている子コンテナ202を含む。次いで、子コンテナ202は、子コンテナ202内に直接ネストされている孫コンテナ208をさらに含む。いくつかの実装形態では、プライマリコンテンツアイテムは、実行されると、子コンテナ202をインスタンス化するスクリプトを含む。子コンテナ202がインスタンス化された後、子コンテナ202内に提示された子コンテンツアイテム内のスクリプトが実行され、それは次に、孫コンテナ208をインスタンス化する。
【００３８】
いくつかの実装形態では、埋込みコンテンツフレーム201内のネストされたコンテナの存在は、ドキュメント200が表示されるときにユーザから隠されることがある。たとえば、孫コンテナ208の表示エリアは、子コンテナ202の表示エリア全体にわたり得る。さらに、子コンテナ202および孫コンテナ208は、目に見える境界線を含まない場合があり、したがって、孫コンテナ208内に提示された任意のコンテンツアイテムは、あたかも最上位のコンテンツアイテムの提示にシームレスに統合されているように見える。子コンテナ202内のコンテンツ(孫コンテナ208以外)は見えない可能性があるが、その存在は、孫コンテナ208の実行コンテキストと最上位コンテナ203との間の通信を容易にするために利用され得る。また、子コンテナ202は、たとえば、孫コンテナ208の作成を容易にする、および/または孫コンテナ208における提示のためのコンテンツの選択を容易にするスクリプトをも含み得る。いくつかの実装形態では、図5に関してさらに詳細に説明されるように、孫コンテナ208の祖先(親)としての家族関係、およびさらに最上位コンテナと同じオリジンであるが孫コンテナ208とは異なるオリジンとのその関連付けにより、子コンテナ202は、最上位コンテナ203と孫コンテナ208のクロスオリジン実行コンテキスト間の双方向通信チャネルの確立を容易にすることができる。
【００３９】
いくつかの実装形態では、ドキュメント200は、実行されると、ドキュメント200によって定義された様々なタスクを実行するために1つまたは複数のサービスを実装するスクリプト(または他の実行可能コード)を含む。一部のサービスは非同期であり、指定されたイベントが行われたことを検出するとタスクの動作を実行する。非同期サービスのスクリプトは、たとえば、検出されたイベントをリッスンし、処理するための1つまたは複数のリスナーモジュールおよび1つまたは複数のハンドラモジュールを含み得る。いくつかのサービスは、たとえばドキュメント200が最初にロードされたときのルーチンの一部として同期的に実行される。いくつかの実装形態では、ドキュメント200は、たとえば最上位コンテナ203および孫コンテナ208のクロスオリジン実行コンテキスト間に双方向通信チャネルを確立するための動作を実行するように構成された接続サービス206a〜206bを含むことができる。接続サービス206a〜206bによって実行される動作は、図4〜図7に関してさらに詳細に説明される。接続サービス206aの第1の構成要素は、子コンテナ202内のスクリプトによって提供することができ、接続サービス206bの第2の構成要素は、孫コンテナ208内のスクリプトによって提供することができる。さらに、ドキュメント200は、接続サービス206a〜206bによって確立された双方向通信チャネルを使用したクロスオリジン実行コンテキスト間の対話を含むタスクなど他のタスクを実行する1つまたは複数のランタイムサービス204a〜n、212a〜nを含み得る。
【００４０】
図3は、複数の埋込みコンテンツフレーム304a〜nを含むドキュメント300のブロック図である。ドキュメント200(図2)と同様に、図3に示されるドキュメント300は、1組のランタイムサービス306a〜nおよび埋込みコンテンツを含むことができる。しかしながら、ドキュメント200とは異なり、ドキュメント300は、たとえば、1つまたは複数のオリジンからの複数のセカンダリコンテンツアイテムを提示するために、複数の埋込みコンテンツフレーム304a〜nを含む。各埋込みコンテンツフレーム304a〜nは、1つ、2つ、3つ、4つ、またはそれ以上のネストされたコンテンツコンテナを含み得る。いくつかの実装形態では、埋込みコンテンツフレーム304a〜nの全部または一部は、図2の例示的な埋込みコンテンツフレーム201のように構造化されている。たとえば、埋込みコンテンツフレーム304a〜nのうちの所与の1つは、1つまたは複数のネストされた外側コンテナ(外側コンテナの最も外側が、子コンテナ202などの最上位コンテナの第1世代の子孫である)と、孫コンテナ208などの内側コンテナとを含み得る。各埋込みコンテンツフレーム304a〜nは、クロスオリジン実行コンテキスト間に双方向通信を確立するために接続サービスを実装するように構成されたスクリプトをも含み得る。いくつかの実装形態では、ドキュメント300内の各コンテナの実行コンテキストは、コンテナの階層構成に対応する階層で表すことができる。
【００４１】
図4を参照すると、同一オリジンポリシーを実施する環境においてクロスオリジン実行コンテキスト間に双方向通信チャネルを作成し、使用するための例示的なプロセス400のフローチャートが示されている。チャネルを確立するための動作のさらなる詳細について、図5〜図7に関して説明される。
【００４２】
ステージ402において、コンピューティングシステム(たとえば、デスクトップコンピュータ、ノートブックコンピュータ、モバイルコンピューティングデバイス、またはウェアラブルコンピューティングデバイス)は、第1および第2の実行コンテキストを作成する。いくつかの実装形態では、第1の実行コンテキストおよび第2の実行コンテキストは各々、異なるオリジンからのコンテンツアイテムを提示するように構成されたドキュメントまたは他のインターフェース内の異なるコンテナに対応する。例として、この説明では、コンピューティングシステムが、埋込みコンテンツフレームの外側コンテナ(たとえば、子コンテナ202)に提示される、第1のオリジンからのコンテンツを実行するための第1の実行コンテキストを作成したと考える。コンテンツフレームが埋め込まれているドキュメントの最上位コンテナは、第1のオリジンからのコンテンツも含んでおり、したがって、最上位コンテナおよび外側コンテナの実行コンテキストは同じである。したがって、同一オリジンポリシーは、これらの実行コンテキストに、対話の相対的な自由と、互いの制限されたデータへのアクセスを許可する。対照的に、この例における第2の実行コンテキストは、第2のオリジンからのコンテンツを実行し、そのコンテンツは、埋込みコンテンツフレームの内側コンテナ(たとえば、孫コンテナ208)に提示される。
【００４３】
ステージ404で、システムは、接続サービスを実行して、第1のオリジンの実行コンテキストと第2のオリジンの実行コンテキストとの間に双方向通信チャネルを確立する。たとえば、通信チャネルは、第1のオリジンに関連付けられた第1の実行コンテキストおよび/または最上位実行コンテキストを、第2のオリジンに関連付けられた第2の実行コンテキストに直接接続し得る。
【００４４】
双方向通信チャネルを生成するために、システムは、いくつかのサブステージ406〜410において動作を実行し得る。サブステージ406で、第1の実行コンテキストと第2の実行コンテキストとの間に第1の単方向サブチャネルが確立される。第1の単方向サブチャネルは、第1の実行コンテキストから第2の実行コンテキストに伸び、第1の実行コンテキストから第2の実行コンテキストにメッセージを搬送するように構成される。サブステージ408で、第2の実行コンテキストと第1の実行コンテキストとの間に第2の単方向サブチャネルが確立される。第2の単方向サブチャネルは、第2の実行コンテキストから第1の実行コンテキストに伸び、第2の実行コンテキストから第1の実行コンテキストにメッセージを搬送するように構成される。一緒に、第1および第2のサブチャネルは、双方向通信チャネルを形成し、ここで、各サブチャネルは、双方向通信のためのターゲットエンドポイントを定義する。
【００４５】
いくつかの実装形態では、第1および第2の実行コンテキストの接続サービスは、通信チャネルを確立するプロセス中に、それぞれの実行コンテキスト間でメッセージを送信するためにプリミティブであるが安全なクロスオリジンメッセージングプロトコルを利用することができる。メッセージングプロトコルは、第1および第2の実行コンテキストが実行されるオペレーティングシステムまたはアプリケーションのアプリケーションプログラミングインターフェース(API)によって接続サービスに公開され得る。たとえば、一部のウェブブラウザは、同一オリジンポリシー下で互いとの対話が制限されている場合でも、ある実行コンテキストから別の実行コンテキストにメッセージを非同期的に送信する機能を定義するpostMessage()関数を含む。実行コンテキストは、それに送信されたpostMessageをリッスンし、検出されたメッセージを処理するかどうかを選択し得る。postMessage()プロトコルは、送信されたpostMessageが受信側実行プロセスによって自動的に処理されないように設計されているが、受信側がメッセージを予想しており、受信側実行プロセスが、それに送信された任意のpostMessageを検出し、処理するために適切なスクリプト(たとえば、リスナとハンドラ)を提供している場合、それを処理することができる。しかしながら、postMessage()プロトコルは、それ自体では双方向通信を提供したり、所与のドキュメントまたはインターフェース内の他の実行コンテキストの発見を提供したりしない。たとえば、図5〜図7に関してさらに詳細に開示されている動作は、いくつかの事例では、postMessage()プロトコルのこれらの欠陥に少なくとも部分的に対処し得る。
【００４６】
オプションの実装形態では、第1および第2の単方向サブチャネルが最初に確立されるとき、それらは、最初は、未接続(動作不可能)ステータスに設定されてもよい。サブチャネル、およびしたがって双方向チャネルが未接続状態にあるとき、メッセージをそれぞれの受信側実行コンテキストに正常に配信できることがまだ確かめられていないので、外部サービス(たとえば、ランタイムサービス)がそのチャネルを使用することが妨げられ得る。したがって、ステージ410で、システムは、双方向通信チャネルを検証し、動作状態を確かめる。第1および第2のサブチャネルを含むチャネルが検証されると、システムは、第1および第2のサブチャネルを含むチャネルのステータスを接続状態(動作状態)に設定する。他の場合、チャネルのステータスは、未接続のままである。
【００４７】
ステージ412で、双方向通信チャネルを確立し、検証した後、サービスは、クロスオリジン実行コンテキスト間でメッセージを搬送するためにチャネルを使用し得る。サービスは、制限されたデータに関する情報の要求を第1の実行コンテキストから第2の実行コンテキストに(またはその逆に)送信する、一方の実行チャネルに他方のイベントの発生を通知する、他方の実行コンテキストのDOMの一部を検査する、他方の実行コンテキストのDOMの一部を変更する、および/またはこれらの動作と他の動作との組合せを実行するために、チャネルを使用し得る。
【００４８】
図5は、クロスオリジン実行コンテキスト間に双方向通信チャネルを確立するための例示的なプロセス500のスイムレーン図である。プロセス500は、1つまたは複数の場所に1つまたは複数のコンピュータを有するコンピューティングシステムによって実行することができ、コンピューティングシステムは、第1のオリジンからのコンテンツを実行するための第1の実行コンテキスト、および第2のオリジンからのコンテンツを実行するための第2の実行コンテキストをインスタンス化している。図5の例では、第1の実行コンテキストは、外側コンテナ、たとえばコンテナ202(図2)に対応し、第2の実行コンテキストは、外側コンテナ内にネストされた内側コンテナ、たとえばコンテナ208(図2)に対応する。特に、外側コンテナについて第1の実行コンテキストによって実行される動作は、第1の実行コンテキストの接続サービスを提供する1つまたは複数のスクリプトによって実行され得る。同様に、内側コンテナについて第2の実行コンテキストによって実行される動作は、第2の実行コンテキストの接続サービスを提供する1つまたは複数のスクリプトによって実行され得る。さらに、外側コンテナは、最上位コンテナ、たとえばコンテナ203に埋め込まれ得る。最上位コンテナは、第1のオリジンからのコンテンツも提示し得る。システムは、同一オリジンポリシーを実施して、異なるオリジンの結果として第1の実行コンテキストと第2の実行コンテキストとの間の対話を制限し得るが、共通のオリジンによる第1の実行コンテキストと最上位コンテナの実行コンテキストとの間のそのような対話を許可し得る。
【００４９】
ステージ506で、第1の実行コンテキストは、発見メッセージについてのリスナーを、最上位実行コンテキストに設定する。それらはオリジンを共有するので、第1の実行コンテキストの接続サービスは、同一オリジンポリシー下で最上位実行コンテキストにリスナーを設定できる。特に、同一オリジンポリシーの制限により、第2の実行コンテキストは、最初は第1の実行コンテキストを認識しないので、第1の実行コンテキストの接続サービスは、第1の実行コンテキストではなく最上位実行コンテキストにリスナーを設定する。したがって、発見リスナーが設定されている最上位コンテナにメッセージが送信されるべきであることを示すことは可能であるが、第2の実行コンテキストは、最初は、発見メッセージの予定受信側として第1の実行コンテキストをターゲットにできない。
【００５０】
ステージ508で、第2の実行コンテキストは、接続ブロードキャストメッセージについてのリスナーを、第2の実行コンテキストに設定する。接続ブロードキャストメッセージは、ステージ518および520に関してさらに説明される。
【００５１】
ステージ510で、第2の実行コンテキストは、発見メッセージを最上位コンテナに送信する。いくつかの実装形態では、発見メッセージは、postMessage()プロトコルを使用して送信される。発見メッセージは、第1の実行コンテキストが双方向通信チャネルを確立するための接続ルーチンを開始するためのメッセージとして認識するように構成されているタイプのメッセージである。
【００５２】
ステージ512で、第1の実行コンテキストは、第2の実行コンテキストから送信された発見メッセージを検出する。発見メッセージは、ステージ506で設定された発見リスナーを使用して検出される。
【００５３】
ステージ514で、第1の実行コンテキストは、発見メッセージを分析してメッセージのソースを決定する。いくつかの実装形態では、第1の実行コンテキストは、メッセージのソースフィールドの値にアクセスすることによって、発見メッセージのソースを決定する。値は、第2の実行コンテキストの一意の識別子とすることができる。それによって、最上位実行コンテキストに送信された発見メッセージは、第1の実行コンテキストが第2の実行コンテキストの存在を決定し、それを識別することを可能にする。
【００５４】
ステージ516で、第1の実行コンテキストは、第1の実行コンテキストと第2の実行コンテキストとの間に第1の単方向サブチャネルを確立する。第1の単方向サブチャネルは、発見メッセージからアクセスされた一意の識別子に基づいて、第2の実行コンテキストを双方向通信チャネルの1つのエンドポイントとして識別する。第1の単方向サブチャネルは、第1の実行コンテキストから第2の実行コンテキストにメッセージを送信するために使用することができる。
【００５５】
ステージ518で、第1の実行コンテキストは、第1の単方向サブチャネルを使用して接続ブロードキャストメッセージを第2の実行コンテキストに送信する。いくつかの実装形態では、接続ブロードキャストメッセージを送信することは、postMessage()プロトコルを使用し、発見メッセージから取得された第2の実行コンテキストの識別子を接続ブロードキャストメッセージの予定受信側として使用して、メッセージを第2の実行コンテキストに送信することを含む。接続ブロードキャストメッセージは、第2の実行コンテキストが発見メッセージに対する応答として認識するように構成されているタイプのメッセージである。
【００５６】
ステージ520で、第2の実行コンテキストは、第1の実行コンテキストから送信された接続ブロードキャストメッセージを検出する。接続ブロードキャストメッセージは、ステージ508で設定された接続ブロードキャストリスナーを使用して検出される。
【００５７】
接続ブロードキャストメッセージを検出すると、第2の実行コンテキストは、メッセージを分析してそのソースを決定する。いくつかの実装形態では、第2の実行コンテキストは、メッセージのソースフィールドの値にアクセスすることによって、接続ブロードキャストメッセージのソースを決定する。値は、第1の実行コンテキストの一意の識別子とすることができる。それによって、第2の実行コンテキストに送信された接続ブロードキャストメッセージは、第2の実行コンテキストが第1の実行コンテキストの存在を決定し、それを識別することを可能にする。
【００５８】
ステージ522で、第2の実行コンテキストは、第2の実行コンテキストと第1の実行コンテキストとの間に第2の単方向サブチャネルを確立する。第2の単方向サブチャネルは、接続ブロードキャストメッセージからアクセスされた一意の識別子に基づいて、第1の実行コンテキストを双方向通信チャネルの第2のエンドポイントとして識別する。第2の単方向サブチャネルは、第2の実行コンテキストから第1の実行コンテキストにメッセージを送信するために使用することができる。
【００５９】
第1および第2の単方向サブチャネルが確立されると、一対のサブチャネルが第1および第2の実行コンテキスト間に双方向通信を提供するのに十分であるので、双方向通信チャネルも確立される。しかしながら、いくつかの実装形態では、双方向通信チャネルのステータスは、最初は、未接続に設定され得る。未接続状態では、双方向通信チャネルは、チャネルの動作はまだ検証されていないので、接続サービス以外のサービスによる使用には利用できない可能性がある。サービスは、使用前にチャネルのステータスをチェックするように構成され得る。チャネルが接続されている場合、外部サービスは、クロスオリジン実行コンテキストにわたってメッセージを送信するためにそれを使用し得る。チャネルが接続されていない場合、外部サービスは、まだチャネルを使用していない可能性がある。
【００６０】
チャネルを接続状態にするための検証プロセスは、ステージ524で開始することができ、ここで、第2の実行コンテキストは、双方向通信チャネルの第2のサブチャネルを使用して、第1のチャネル接続メッセージを第2の実行コンテキストに送信する。チャネル接続メッセージは、受信側実行コンテキストに、双方向通信チャネルのステータスを接続状態に設定するよう指示するメッセージである。いくつかの実装形態では、チャネル接続メッセージ(および第1の実行コンテキストと第2の実行コンテキストとの間で交換される任意の他のメッセージ)は、postMessage()プロトコルを使用して送信され得る。第1の実行コンテキストは、(たとえば、第1のサブチャネルを確立した後)第1の接続メッセージについてのリスナーを第1の実行コンテキスト内に設定している可能性がある。リスナーが第2の実行コンテキストから第1の接続メッセージを検出すると(ステージ526)、第1の実行コンテキストは、双方向通信チャネルを接続状態に設定する(ステージ528)。しかしながら、チャネルの状態は、第1および第2の実行コンテキストの各々において独立して維持される。したがって、ステージ530で、第1の実行コンテキストは、第2のチャネル接続メッセージを第2の実行プロセスに送信する。第2の実行コンテキストは、(たとえば、第2のサブチャネルを確立した後)第2の接続メッセージについてのリスナーを第2の実行コンテキスト内に設定している可能性がある。リスナーが第1の実行コンテキストから第2の接続メッセージを検出すると(ステージ532)、第2の実行コンテキストも、双方向通信チャネルを未接続状態から接続状態に移行させる。エンドポイントがアクティブにされ、チャネルの状態が第1および第2の実行コンテキストの両方で接続に設定された状態で、第1および第2のオリジンに関連付けられた実行コンテキストにおける1つまたは複数のサービスによって、双方向チャネルを適切に使用することができる。
【００６１】
図3に関して説明したように、いくつかのドキュメントまたはインターフェースは、複数の埋込みコンテンツフレーム、たとえばフレーム304a〜nを含むことができる。そのようなドキュメントの場合、各埋込みコンテンツフレームは、埋込みコンテンツフレームの外側コンテナ(たとえばコンテナ202)および埋込みコンテンツフレームの内側コンテナ(たとえばコンテナ208)の実行コンテキスト間の通信を可能にするために、それ自体の双方向通信チャネルを確立する必要があり得る。各埋込みコンテンツフレームについてそれぞれの双方向チャネルを確立することに伴う1つの課題は、最上位コンテナの実行コンテキストに送信された初期発見メッセージがすべて、すべての埋込みコンテンツフレームの外側コンテナの実行コンテキストによって設定された発見メッセージリスナーの各々によって聞かれる可能性があることである。あらゆる実行コンテキストがあらゆる発見メッセージに応答するのを防ぐために、所与の埋込みコンテンツフレームの外側コンテナについての発見メッセージイベントのためのハンドラは、発見メッセージのソース(すなわち第2の実行コンテキスト)は、埋込みコンテンツフレームの外側コンテナの実行コンテキストの子孫であるかどうかをチェックすることによって、それが発見メッセージの予定受信側であるかどうかを決定することができる。たとえば、第1の埋込みコンテンツフレームの外側iFrame内の接続サービスが、第1の検出された発見メッセージが外側iFrame内にネストされている内側iFrameから送信されたと決定した場合、接続サービスは、それが発見メッセージの予定受信側であったと決定し、図5に関して開示されたように、双方向通信チャネルを確立するための手順を継続することによって、メッセージに応答することができる。発見メッセージが家族以外のソースから送信された(たとえば、同じ埋込みコンテンツフレーム内の子孫からではない)場合、外側iFrameの接続サービスは、それが発見メッセージの予定受信側ではなかったと決定することができ、したがって、メッセージを破棄することができる。
【００６２】
図6は、複数の埋込みコンテンツフレームがドキュメント内に提供されているときにクロスオリジン双方向通信チャネルを確立するための例示的なプロセス600のスイムレーン図である。この図は、各埋込みコンテンツフレームについての専用の双方向通信チャネルを確立するために、2つの埋込みコンテンツフレームのコンテナ内の接続サービスによってとられ得るアクションを示す。いくつかの実装形態では、各埋込みコンテンツフレームは、図2のフレーム201と同様に配置され、各々、各埋込みコンテンツフレームをホストする最上位コンテナのコンテンツと同じオリジンからのコンテンツを提示する外側コンテナを含む。各埋込みコンテンツフレーム内の内側コンテナは、外部フレームのオリジンおよび最上位コンテナとは異なる1つまたは複数のオリジンからのコンテンツを提示し得る。コンピューティングシステムは、各コンテナからのコンテンツをそれぞれ実行するために個々の実行コンテキストをインスタンス化し得る。いくつかの実装形態では、本明細書で開示される技法は、各内部フレームが最上位実行コンテキストに同じ発見メッセージを送信するときでも、複数の埋込みコンテンツフレームが同一または類似のスクリプト(たとえば接続サービス)を使用して同時に最上位コンテナの実行コンテキストに接続することを有利に可能にする。
【００６３】
ステージ614で、第1の実行コンテキストは、最上位実行コンテキストに発見メッセージリスナーを設定する。同様に、ステージ618で、第3の実行コンテキストも、最上位実行コンテキストに発見メッセージリスナーを設定する。ステージ616および620で、第2の実行コンテキストと第4の実行コンテキストは両方、それぞれの実行コンテキスト内に接続ブロードキャストリスナーを設定する。ステージ622で、第2の実行コンテキストは、最上位コンテナの実行コンテキストに初期発見メッセージを送信する。ステージ624および626で、両方の埋込みコンテンツフレームからの発見リスナーは、第2の実行コンテキストからの初期発見メッセージを検出する。次いで、ステージ628で、メッセージのプロパティの値が、メッセージが第1の実行コンテキストの子孫から送信されたことを示すので、第1の実行コンテキストは、それが初期発見メッセージのターゲット(たとえば予定受信側)であると決定する。対照的に、ステージ628で、第3の実行コンテキストは、それが第3の実行コンテキストの子孫から送信されず、したがって、同じ埋込みコンテンツフレームの内側コンテナからではないので、それが初期発見メッセージのターゲットではないと決定する。したがって、第3の実行コンテキストは、発見メッセージを無視し、第2の実行コンテキストとの接続を確立するためのさらなるアクションをとることなく、それを破棄する。一方、第1の実行コンテキストは、ステージ514(図5)から進み、引き続き、双方向通信チャネルを確立し、検証する。
【００６４】
図7は、実行コンテキストにおける複数のサービスのために双方向通信チャネルを多重化するための例示的なプロセス700のスイムレーン図である。たとえば、埋込みコンテンツフレームは、ユーザが最上位コンテナ内の特定の制御要素を選択したとき、双方向通信チャネルを使用して、埋込みコンテンツフレームを閉じるための命令を渡すように構成された第1のランタイムサービスを含む内側コンテナ(たとえば、iFrameまたは他のウィンドウオブジェクト)内にコンテンツを提示し得る。内側コンテナは、内側コンテナ内の制御要素の選択に基づいて、双方向通信チャネルを使用して、最上位コンテナ内のコンテンツを更新するためのクロスオリジン命令を渡すように構成された第2のランタイムサービスをさらに含み得る。いくつかの実装形態では、各サービスは、専用の双方向通信チャネルを必要とすることがある。プロセス700は、クロスオリジン実行コンテキストの同じペア間に複数のチャネルを確立することができる例示的な技法を示す。いくつかの実装形態では、各チャネルは、実行コンテキストのうちの1つに関連付けられた複数のサービスのうちの異なる1つに割り当てられる。図7において、最左のレーンは、埋込みコンテンツフレームの外側コンテナについての第1の実行コンテキストの動作を示し、中央のレーンは、埋込みコンテンツフレームの内側コンテナの第1のサービスに代わって第2の実行コンテキストの動作を示し、最右のレーンは、埋込みコンテンツフレームの内側コンテナの第2のサービスについての第2の実行コンテキストの動作を示す。
【００６５】
ステージ708で、第1の実行コンテキストは、外側コンテナと同じオリジンを共有する最上位コンテナの実行コンテキストに発見メッセージイベントリスナーを設定する。
【００６６】
ステージ710および712で、第2の実行コンテキストの接続サービスは、第2の実行コンテキストに2つの接続ブロードキャストメッセージイベントリスナーを設定する。これらのリスナーのうちの最初のものは、第1のランタイムサービスに代わって設定され、リスナーの2番目のものは、内側コンテナの第2のランタイムサービスに代わって設定される。親実行コンテキスト(たとえば、第1の実行コンテキスト)から後で受信される可能性のある予想される接続ブロードキャストメッセージを区別するために、第1のリスナーは、第1のランタイムサービスに関連する第1のトークンを含む接続ブロードキャストメッセージのみを検出するように構成される。同様に、第2のリスナーは、第2のランタイムサービスに関連する第2のトークンを含む接続ブロードキャストメッセージのみを検出するように構成される。
【００６７】
ステージ714で、第2の実行コンテキストは、双方向通信チャネルを確立するための要求を示すために最上位実行コンテキストに発見メッセージを送信する。送信された発見メッセージは、チャネルが第1のランタイムサービスに関してセットアップされるべきであることを示すために、第1のランタイムサービスに関連付けられた第1のトークンを含むことができる。
【００６８】
ステージ716で、第1の実行コンテキストは、発見メッセージリスナーからの指示に基づいて、第2の実行コンテキストからの発見メッセージを検出する。ステージ718で、第1の実行コンテキストは、発見メッセージを分析してメッセージのソースを決定する。たとえば、第1の実行コンテキストは、発見メッセージに関連するプロパティから第2の実行コンテキストの識別子を決定してもよい。第2の実行コンテキストの識別子を使用して、ステージ720で、第1の実行コンテキストは、次いで、第2の実行コンテキストの第1のサービスとの第1の単方向サブチャネルを確立する。発見メッセージに含まれた第1のトークンを、第1の単方向サブチャネルを介して第2の実行コンテキストに送信される後続のメッセージに含めるように第1のサブチャネルを構成することによって、第1の単方向サブチャネルを第1のサービスに関連付けることができる。ステージ722で、第1の実行コンテキストは、次いで、第1の単方向サブチャネルを介して第1の接続ブロードキャストメッセージを第2の実行コンテキストに送信する。第1の接続ブロードキャストメッセージは、そのメッセージが第2の実行コンテキストの第1のランタイムサービスに関連することを示すために、第1のトークンを含む。
【００６９】
第1の接続ブロードキャストメッセージを第2の実行コンテキストに送信した結果として、第2の実行コンテキストは、メッセージを受信し、接続ブロードキャストリスナーによって検出される(ステージ724および730)。ステージ726で、第2の実行コンテキストは、第1の接続ブロードキャストメッセージを分析し、メッセージ内の第1のトークンを識別し、そのメッセージが第1のランタイムサービスに関連することを第1のトークンから決定する。次いで、プロセス700は、第1の実行コンテキストと第2の実行コンテキストの第1のサービスとの間に双方向通信チャネルを確立し、検証するために、ステージ522(図5)に進むことができる。第1のトークンは、チャネルの確立中、およびメッセージが第1のランタイムサービスに関係することを示すためにチャネルの確立後にデータを送信するために、第1の実行コンテキストと第2の実行コンテキストとの間の後続のメッセージに含めることができる。
【００７０】
対照的に、ステージ732で、第2の実行コンテキストは、第1の接続ブロードキャストメッセージが第2のランタイムサービスに関連する第2のトークンを含んでおらず、したがって、第1の接続ブロードキャストメッセージは、第2のランタイムサービスに関係しないことを決定する。したがって、第2の実行コンテキストは、第2のランタイムサービスに関して第1の接続ブロードキャストメッセージを破棄し、第1の実行コンテキストと第2の実行コンテキストの第2のランタイムサービスとの間にチャネルを確立しないことを選択する。図7の図には示されていないが、いくつかの実装形態では、第1の実行コンテキストと第2の実行コンテキストの第2のランタイムサービスとの間で通信するために別個のチャネルが確立され得る。
【００７１】
いくつかの実装形態では、双方向通信チャネルのセキュリティを強化するために、許可されるオリジンのホワイトリストは、第1および第2の実行コンテキストの一方または両方によって維持され得る。発見メッセージが、第2のオリジンの別の実行コンテキストとの双方向チャネルを確立することを要求する第1のオリジンの実行コンテキストで受信される場合、第1のオリジンの実行コンテキストは、ホワイトリストをチェックして、第2のオリジンが現れるかどうか(たとえば、第2のオリジンのドメインがホワイトリスト内の信頼できるドメインであるかどうかなど)を決定する。第2のオリジンがホワイトリスト上にない場合、第1のオリジンの実行コンテキストは、通信チャネルを確立するための要求を拒否し得る。いくつかの実装形態では、禁止されたオリジンをブラックリストに追加することができ、これは、クロスオリジン実行コンテキストのためのチャネルを確立する旨の要求を受け入れる前にチェックされる。
【００７２】
図8は、本明細書に記載の技法を実施するために使用することができるコンピューティングデバイス800およびモバイルコンピューティングデバイスの一例を示す。コンピューティングデバイス800は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、および他の適切なコンピュータなど、様々な形態のデジタルコンピュータを表すものとする。モバイルコンピューティングデバイスは、携帯情報端末、セルラー電話、スマートフォン、および他の同様のコンピューティングデバイスなど、様々な形態のモバイルデバイスを表すものとする。本明細書に示された構成要素、それらの接続および関係、ならびにそれらの機能は、例示的なものにすぎず、本明細書に記載され、および/または請求される本発明の実装形態を限定するものではない。
【００７３】
コンピューティングデバイス800は、プロセッサ802、メモリ804、記憶デバイス806、メモリ804および複数の高速拡張ポート810に接続する高速インターフェース808、ならびに低速拡張ポート814および記憶デバイス806に接続する低速インターフェース812を含む。プロセッサ802、メモリ804、記憶デバイス806、高速インターフェース808、高速拡張ポート810、および低速インターフェース812の各々は、様々なバスを使用して相互接続されており、共通のマザーボード上に、または他の方法で適宜に取り付けることができる。プロセッサ802は、高速インターフェース808に結合されたディスプレイ816など外部入出力デバイス上にGUIのグラフィカル情報を表示するために、メモリ804または記憶デバイス806に記憶された命令を含む、コンピューティングデバイス800内で実行するための命令を処理することができる。他の実装形態では、複数のプロセッサおよび/または複数のバスを、適宜に、複数のメモリおよび複数のタイプのメモリとともに使用されてもよい。また、複数のコンピューティングデバイスが接続されてもよく、各デバイスは、(たとえば、サーババンク、ブレードサーバのグループ、またはマルチプロセッサシステムとして)必要な動作の一部を提供する。
【００７４】
メモリ804は、コンピューティングデバイス800内の情報を記憶する。いくつかの実装形態では、メモリ804は、揮発性メモリユニットである。いくつかの実装形態では、メモリ804は、不揮発性メモリユニットである。メモリ804は、磁気または光ディスクなど、別の形態のコンピュータ可読媒体であってもよい。
【００７５】
記憶デバイス806は、コンピューティングデバイス800のための大容量ストレージを提供することができる。いくつかの実装形態では、記憶デバイス806は、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリまたは他の類似の固体メモリデバイス、あるいは、ストレージエリアネットワークまたは他の構成内のデバイスを含むデバイスのアレイなどのコンピュータ可読媒体であってもよく、またはそれらを含んでいてもよい。コンピュータプログラム製品は、実行されると、上記で説明したものなど、1つまたは複数の方法を実行する命令も含んでいてもよい。コンピュータプログラム製品はまた、メモリ804、記憶デバイス806、またはプロセッサ802上のメモリなど、コンピュータ可読媒体または機械可読媒体で有形に具体化することもできる。
【００７６】
高速インターフェース808は、コンピューティングデバイス800のための帯域幅集約な動作を管理し、低速インターフェース812は、より低い帯域幅集約な動作を管理する。そのような機能の割振りは例にすぎない。いくつかの実装形態では、高速インターフェース808は、メモリ804、ディスプレイ816に(たとえばグラフィックプロセッサまたはアクセラレータなどを介して)、および様々な拡張カード(図示せず)を受け入れることができる高速拡張ポート810に結合される。この実装形態では、低速インターフェース812は、記憶デバイス806および低速拡張ポート814に結合されている。(たとえばUSB、Bluetooth(登録商標)、Ethernet、ワイヤレスイーサネット(登録商標)など)様々な通信ポートを含み得る低速拡張ポート814は、たとえばネットワークアダプタを介して、キーボード、ポインティングデバイス、スキャナ、またはスイッチやルータなどのネットワーキングデバイスなど、1つまたは複数の入出力デバイスに結合されてもよい。
【００７７】
図に示すように、コンピューティングデバイス800は、いくつかの異なる形態で実装されてもよい。たとえば、コンピューティングデバイス800は、標準的なサーバ820として、またはそのようなサーバのグループにおいて複数回、実装されてもよい。さらに、ラップトップコンピュータ822などのパーソナルコンピュータにおいて実装されてもよい。また、ラックサーバシステム824の一部として実装されてもよい。代替的に、コンピューティングデバイス800からの構成要素は、モバイルコンピューティングデバイス850などのモバイルデバイス(図示せず)内の他の構成要素と結合されてもよい。そのようなデバイスの各々は、コンピューティングデバイス800、およびモバイルコンピューティングデバイス850のうちの1つまたは複数を含んでいてもよく、システム全体は、互いに通信する複数のコンピューティングデバイスから構成されてもよい。
【００７８】
モバイルコンピューティングデバイス850は、構成要素の中でも、プロセッサ852、メモリ864、ならびにディスプレイ854などの入出力デバイス、通信インターフェース866、およびトランシーバ868を含む。モバイルコンピューティングデバイス850はまた、追加のストレージを提供するために、マイクロドライブまたは他のデバイスなどの記憶デバイスを備えていてもよい。プロセッサ852、メモリ864、ディスプレイ854、通信インターフェース866、およびトランシーバ868の各々は、様々なバスを使用して相互接続されており、構成要素のうちのいくつかは、共通のマザーボード上に、または他の方法で適宜に実装されてもよい。
【００７９】
プロセッサ852は、メモリ864に記憶されている命令を含む、モバイルコンピューティングデバイス850内の命令を実行することができる。プロセッサ852は、別個の複数のアナログおよびデジタルプロセッサを含むチップのチップセットとして実装されてもよい。プロセッサ852は、たとえば、ユーザインターフェースの制御、モバイルコンピューティングデバイス850によって実行されるアプリケーション、およびモバイルコンピューティングデバイス850によるワイヤレス通信など、モバイルコンピューティングデバイス850の他の構成要素の調整を提供してもよい。
【００８０】
プロセッサ852は、ディスプレイ854に結合された制御インターフェース858およびディスプレイインターフェース856を介してユーザと通信することができる。ディスプレイ854は、たとえば、TFT(薄膜トランジスタ液晶ディスプレイ)ディスプレイ、またはOLED(有機発光ダイオード)ディスプレイ、または他の適切なディスプレイ技術であってもよい。ディスプレイインターフェース856は、グラフィカルおよび他の情報をユーザに提示するためにディスプレイ854を駆動するための適切な回路を備えていてもよい。制御インターフェース858は、ユーザからコマンドを受信し、それらをプロセッサ852にサブミットするために変換してもよい。さらに、モバイルコンピューティングデバイス850と他のデバイスとの近距離通信を可能にするために、外部インターフェース862がプロセッサ852との通信を提供することができる。外部インターフェース862は、たとえば、いくつかの実装形態ではワイヤード通信、または他の実装形態ではワイヤレス通信を提供してもよく、複数のインターフェースが使用されてもよい。
【００８１】
メモリ864は、モバイルコンピューティングデバイス850内の情報を記憶する。メモリ864は、コンピュータ可読媒体、揮発性メモリユニット、または不揮発性メモリユニットのうちの1つまたは複数として実装することができる。拡張メモリ874も設けられ、たとえばSIMM(シングルインラインメモリモジュール)カードインターフェースを含み得る拡張インターフェース872を介してモバイルコンピューティングデバイス850に接続されてもよい。拡張メモリ874は、モバイルコンピューティングデバイス850のための追加の記憶スペースを提供してもよく、または、モバイルコンピューティングデバイス850のためのアプリケーションもしくは他の情報をも記憶してもよい。具体的には、拡張メモリ874は、上述のプロセスを実行または補足するための命令を含んでいてもよく、また安全な情報も含んでいてもよい。したがって、たとえば、拡張メモリ874は、モバイルコンピューティングデバイス850のためのセキュリティモジュールとして提供されてもよく、モバイルコンピューティングデバイス850の安全な使用を可能にする命令でプログラムされてもよい。さらに、安全なアプリケーションが、識別情報をSIMMカード上にハッキング不可能な方法で配置するなど、追加情報とともにSIMMカードを介して提供されてもよい。
【００８２】
メモリは、以下で説明するように、たとえば、フラッシュメモリおよび/またはNVRAMメモリ(不揮発性ランダムアクセスメモリ)を含んでいてもよい。コンピュータプログラム製品は、実行されると、上記で説明したものなど、1つまたは複数の方法を実行する命令を含む。コンピュータプログラム製品は、メモリ864、拡張メモリ874、またはプロセッサ852上のメモリなどのコンピュータ可読媒体または機械可読媒体とすることができる。いくつかの実装形態では、コンピュータプログラム製品は、たとえばトランシーバ868または外部インターフェース862を介して伝搬信号で受信することができる。
【００８３】
モバイルコンピューティングデバイス850は、必要な場合、デジタル信号処理回路を含み得る通信インターフェース866を介してワイヤレス通信してもよい。通信インターフェース866は、GSM(登録商標)音声通話(モバイル通信用グローバルシステム)、SMS(ショートメッセージサービス)、EMS(拡張メッセージングサービス)、またはMMSメッセージング(マルチメディアメッセージングサービス)、CDMA(符号分割多元接続)、TDMA(時分割多元接続)、PDC(パーソナルデジタルセルラー)、WCDMA(登録商標)(広帯域符号分割多元接続)、CDMA2000、またはGPRS(汎用パケット無線サービス)など、様々なモードまたはプロトコル下での通信を提供し得る。そのような通信は、たとえば、無線周波数を使用してトランシーバ868を介して行われてもよい。さらに、Bluetooth(登録商標)、WiFi、または他のそのようなトランシーバ(図示せず)を使用するなど、短距離通信が行われてもよい。さらに、GPS(全地球測位システム)受信機モジュール870は、追加のナビゲーションおよび位置関連のワイヤレスデータをモバイルコンピューティングデバイス850に提供してもよく、それは、モバイルコンピューティングデバイス850上で実行しているアプリケーションによって適宜に使用されてもよい。
【００８４】
モバイルコンピューティングデバイス850は、オーディオコーデック860を使用して可聴的に通信してもよく、オーディオコーデック860は、ユーザから話された情報を受信し、それを使用可能なデジタル情報に変換してもよい。オーディオコーデック860は、同様に、たとえばモバイルコンピューティングデバイス850のハンドセット内のスピーカーを通してなど、ユーザのための可聴音を生成してもよい。そのような音は、音声通話からの音を含み、録音された音(たとえばボイスメッセージ、音楽ファイルなど)を含み、モバイルコンピューティングデバイス850上で動作するアプリケーションによって生成された音も含み得る。
【００８５】
図に示すように、モバイルコンピューティングデバイス850は、いくつかの異なる形態で実装されてもよい。たとえば、モバイルコンピューティングデバイス850は、セルラー電話880として実装されてもよい。モバイルコンピューティングデバイス850は、スマートフォン882、携帯情報端末、または他の同様のモバイルデバイスの一部として実装されてもよい。
【００８６】
本明細書に記載のシステムおよび技法の様々な実装形態は、デジタル電子回路、集積回路、特別に設計されたASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、および/またはそれらの組合せで実現できる。これらの様々な実装形態は、ストレージシステム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスとの間で、データおよび命令を送受信するために結合された、専用または汎用目的であり得る少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能および/または解釈可能な1つまたは複数のコンピュータプログラムにおける実装形態を含むことができる。
【００８７】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとしても知られる)は、プログラマブルプロセッサのための機械命令を含み、高レベル手続き型および/またはオブジェクト指向プログラミング言語で、および/またはアセンブリ/機械言語で実装することができる。本明細書で使用する機械可読媒体およびコンピュータ可読媒体という用語は、たとえば、機械命令を機械可読信号として受信する機械可読媒体を含む、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される、(たとえば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(PLD)など)任意のコンピュータプログラム製品、装置、および/またはデバイスを指す。機械可読信号という用語は、機械命令および/またはデータをプログラマブルプロセッサに提供するために使用される任意の信号を指す。
【００８８】
ユーザとの対話を提供するために、本明細書に記載されるシステムおよび技法は、ユーザに情報を表示するためのディスプレイデバイス(たとえば、CRT(陰極線管)またはLCD(液晶ディスプレイ)モニタなど)、ならびにキーボードおよび、ユーザがコンピュータに入力を提供することができるポインティングデバイス(たとえば、マウスまたはトラックボールなど)を有するコンピュータ上に実装することができる。他の種類のデバイスを使用して、ユーザとの対話を提供することもでき、たとえば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック(たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックなど)とすることができ、ユーザからの入力は、音響、音声、または触覚入力を含む任意の形態で受信することができる。
【００８９】
本明細書に記載されるシステムおよび技法は、(たとえばデータサーバとしての)バックエンド構成要素を含む、またはミドルウェア構成要素(たとえば、アプリケーションサーバなど)を含む、またはフロントエンド構成要素(たとえば、グラフィカルユーザインターフェースを有するクライアントコンピュータ、またはユーザが本明細書に記載されたシステムおよび技法の実装と対話することができるウェブブラウザを有するクライアントコンピュータなど)を含む、またはそのようなバックエンド、ミドルウェア、またはフロントエンド構成要素の任意の組合せを含むコンピューティングシステムにおいて実装することができる。システムの構成要素は、任意の形式または媒体のデジタルデータ通信(たとえば、通信ネットワークなど)によって相互接続することができる。通信ネットワークの例には、ローカルエリアネットワーク(「LAN」)、ワイドエリアネットワーク(「WAN」)、およびインターネットがある。
【００９０】
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントとサーバは、一般に、互いに遠隔であり、典型的には、通信ネットワークを介して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行され、互いにクライアント-サーバ関係を有するコンピュータプログラムのおかげで生じる。
【００９１】
本明細書でのシステム、方法、デバイス、および他の技法がユーザに関する個人情報(たとえばコンテキストデータ)を収集する、または個人情報を利用する可能性がある状況では、ユーザは、プログラムまたは機能がユーザ情報(たとえば、ユーザのソーシャルネットワーク、社会的行動または活動、職業、ユーザの嗜好、またはユーザの現在位置に関する情報)を収集するかどうかを制御する機会、または、ユーザにとってより関連があり得る、コンテンツサーバからのコンテンツを受信するかどうか、および/またはどのようにコンテンツを受信するかを制御する機会を与えられ得る。さらに、あるデータは、それが記憶または使用される前に1つまたは複数の方法で扱われる可能性があり、したがって、個人的に識別可能な情報は削除される。たとえば、個人的に識別可能な情報をそのユーザについて決定することができないように、ユーザの識別情報を扱うことができ、または、ユーザの特定の場所を特定できないように、(市、郵便番号、または州レベルなど)位置情報が取得されるユーザの地理的位置が一般化され得る。したがって、ユーザは、ユーザについての情報をどのように収集するか、およびコンテンツサーバによってどのように使用されるかを制御し得る。
【００９２】
様々な実装形態を上記で詳細に説明したが、他の変形も可能である。たとえば、一実施形態または実装形態を参照して説明した特徴は、本明細書に記載の別の実施形態または実装形態で提供されてもよい。さらに、図面に示される論理フローは、望ましい結果を達成するために、示された特定の順序または逐次的な順序を必ずしも必要としない。さらに、他のステップが設けられてもよく、または記載されたフローからステップが削除されてもよく、他の構成要素を記載のシステムに追加したり、そこから削除したりしてもよい。したがって、他の実装形態は、以下の特許請求の範囲内にある。
【符号の説明】
【００９３】
100  ウィンドウ
102  ウェブページ
104a  埋込みコンテンツフレーム
104b  埋込みコンテンツフレーム
106a  ユーザインターフェース要素
106b  ユーザインターフェース要素
200  ドキュメント
201  埋込みコンテンツフレーム
203  最上位コンテナ
204a〜n  ランタイムサービス
206a  接続サービス
206b  接続サービス
208  孫コンテナ
212a〜n  ランタイムサービス
300  ドキュメント
304a〜n  埋込みコンテンツフレーム
306a〜n  ランタイムサービス
800  コンピューティングデバイス
802  プロセッサ
804  メモリ
806  記憶デバイス
808  高速インターフェース
810  高速拡張ポート
812  低速インターフェース
814  低速拡張ポート
816  ディスプレイ
820  サーバ
822  ラップトップコンピュータ
824  ラックサーバシステム
850  モバイルコンピューティングデバイス
852  プロセッサ
854  ディスプレイ
856  ディスプレイインターフェース
858  制御インターフェース
860  オーディオコーデック
862  外部インターフェース
864  メモリ
866  通信インターフェース
868  トランシーバ
872  拡張インターフェース
874  拡張メモリ
880  セルラー電話
882  スマートフォン
【図１】
2019532384.tif 000003
【図２】
2019532384.tif 000004
【図３】
2019532384.tif 000005
【図４】
2019532384.tif 000006
【図５】
2019532384.tif 000007
【図６】
2019532384.tif 000008
【図７】
2019532384.tif 000009
【図８】
2019532384.tif 000010
【手続補正書】
【提出日】平成31年2月19日(2019.2.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングシステム上の第1の実行コンテキストと前記コンピューティングシステム上の第2の実行コンテキストとの間でデータを通信するためのコンピュータ実装方法であって、
前記第1の実行コンテキストが、第1のオリジンからのコンテンツを実行し、
前記第2の実行コンテキストが、前記第1のオリジンとは異なる第2のオリジンからのコンテンツを実行し、
前記第1の実行コンテキストおよび前記第2の実行コンテキストは各々、前記コンピューティングシステムによって実施される同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限され、前記方法が、
前記第1の実行コンテキストと前記第2の実行コンテキストとの間に双方向通信チャネルを、前記コンピューティングシステムによって確立するステップであり、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された初期発見メッセージを受信するステップと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの識別子を決定するステップと、
前記第2の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第1の単方向サブチャネルを、前記第1の実行コンテキストによって確立するステップであり、前記第1の単方向サブチャネルが、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成される、ステップと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信するステップと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された前記接続ブロードキャストメッセージに基づいて、前記第1の実行コンテキストの識別子を決定するステップと、
前記第1の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第2の単方向サブチャネルを、前記第2の実行コンテキストによって確立するステップであり、前記第2の単方向サブチャネルが、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、ステップと
を含む、ステップと、
前記双方向通信チャネルを介して前記第1の実行コンテキストと前記第2の実行コンテキストとの間でメッセージを通信するステップと
を含むコンピュータ実装方法。
【請求項２】
前記同一オリジンポリシーに従って、前記コンピューティングシステムが、前記第1のオリジンおよび前記第2のオリジンの送信プロトコル、アドレス、またはポート番号のうちの少なくとも1つが互いに異なることを識別することに応答して、前記第2のオリジンを前記第1のオリジンと異なるものとして分類する、請求項1に記載のコンピュータ実装方法。
【請求項３】
前記第1の実行コンテキストが、前記第1のオリジンからの前記コンテンツを提示するように構成された第1のウィンドウオブジェクトを含み、前記第2の実行コンテキストが、前記第2のオリジンからの前記コンテンツを提示するように構成された第2のウィンドウオブジェクトを含む、請求項1または2に記載のコンピュータ実装方法。
【請求項４】
前記第1のウィンドウオブジェクトに提示された前記コンテンツが、前記第1のオリジンに関連付けられた第1のドメインにおいて1つまたは複数のサーバによってホストされる第1のウェブページを含み、
前記第2のウィンドウオブジェクトに提示された前記コンテンツが、前記第2のオリジンに関連付けられた第2のドメインにおいて1つまたは複数のサーバによってホストされる第2のウェブページを含み、
前記第2のウィンドウオブジェクトが、前記第1のウェブページに埋め込まれているインラインフレーム(iFrame)である
請求項3に記載のコンピュータ実装方法。
【請求項５】
前記コンピューティングシステムのウェブブラウジングアプリケーションにより前記第1の実行コンテキストおよび前記第2の実行コンテキストを生成するステップ
をさらに含み、前記第1の単方向サブチャネルが、前記ウェブブラウジングアプリケーションのpostMessageアプリケーションプログラミングインターフェース(API)を使用して、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成され、
前記第2の単方向サブチャネルが、前記ウェブブラウジングアプリケーションの前記postMessage APIを使用して、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される
請求項1〜4のいずれか一項に記載のコンピュータ実装方法。
【請求項６】
前記第2の実行コンテキストが、前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であり、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの前記識別子を決定するステップが、前記初期発見メッセージのソース識別子フィールドの値にアクセスするステップを含む
請求項1〜5のいずれか一項に記載のコンピュータ実装方法。
【請求項７】
前記第1および第2の単方向サブチャネルを確立した後、前記コンピューティングシステムによって前記双方向通信チャネルを検証するステップをさらに含み、前記検証するステップが、
前記第2の実行コンテキストから前記第1の実行コンテキストに、第1のチャネル接続メッセージを送信するステップと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記第1のチャネル接続メッセージを受信するステップと、
第1のチャネル接続メッセージを受信したことに応答して、前記第1の実行コンテキストにおいて、前記双方向通信チャネルを接続状態にあるとマークするステップと、
前記第1の実行コンテキストから前記第2の実行コンテキストに、第2のチャネル接続メッセージを送信するステップと、
前記第2の実行コンテキストにおいて、前記第1の実行コンテキストから送信された前記第2のチャネル接続メッセージを受信するステップと、
前記第2のチャネル接続メッセージを受信したことに応答して、前記第2の実行コンテキストにおいて、前記双方向通信チャネルを接続状態にあるとマークするステップと
を含む、
請求項1〜6のいずれか一項に記載のコンピュータ実装方法。
【請求項８】
前記第1の実行コンテキスト内の1つまたは複数のサービスが、前記第1の単方向サブチャネルが前記接続状態にあると識別したことに応答して、前記双方向通信チャネルを使用して、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成され、
前記第1の実行コンテキスト内の前記1つまたは複数のサービスが、前記第1の単方向サブチャネルが未接続状態にあると識別したことに応答して、前記双方向通信チャネルを使用して前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するのではなく、代替動作を実行するように構成される
請求項7に記載のコンピュータ実装方法。
【請求項９】
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストが前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であるかどうかをチェックすることによって、前記第1の実行コンテキストが前記第2の実行コンテキストからの前記初期発見メッセージのターゲットであったかどうかを決定するステップと、
前記第2の実行コンテキストが前記第1の実行コンテキストの子孫であると識別したことに応答して、
(i)前記第1の実行コンテキストにおいて、前記第1の実行コンテキストが前記第2の実行コンテキストからの前記初期発見メッセージのターゲットであったと決定し、前記第1の単方向サブチャネルを確立することに進むステップと、
(ii)前記第1の実行コンテキストにおいて、前記第1の実行コンテキストと前記第2の実行コンテキストとの間に前記第1の単方向サブチャネルを確立することを選択するステップと
をさらに含む請求項1〜8のいずれか一項に記載のコンピュータ実装方法。
【請求項１０】
前記第1の実行コンテキストにおいて、前記第1のオリジン以外のオリジンからのコンテンツを実行する第3の実行コンテキストから送信された第2の初期発見メッセージを受信するステップであり、前記第1の実行コンテキストおよび前記第3の実行コンテキストが各々、前記コンピューティングシステムによって実施される前記同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限される、ステップと、
前記第1の実行コンテキストにおいて、前記第3の実行コンテキストが前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であるかどうかをチェックすることによって、前記第1の実行コンテキストが前記第3の実行コンテキストからの前記第2の初期発見メッセージのターゲットであったかどうかを決定するステップと、
前記第1の実行コンテキストにおいて、前記第3の実行コンテキストが前記第1の実行コンテキストの子孫ではないと識別したことに応答して、前記第1の実行コンテキストと前記第3の実行コンテキストとの間に通信チャネルを確立しないように前記第2の初期発見メッセージを破棄するステップと
をさらに含む請求項1〜9のいずれか一項に記載のコンピュータ実装方法。
【請求項１１】
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストからの前記初期発見メッセージが前記第1の実行コンテキストと前記第2の実行コンテキストの第1のサービスとの間で第1のチャネルの確立を開始するためのものであることを示す第1のトークンを、前記初期発見メッセージが含むことを識別するステップと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された第2の初期発見メッセージを受信するステップと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストからの前記第2の初期発見メッセージが前記第1の実行コンテキストと、前記第2の実行コンテキストの前記第1のサービスとは異なる前記第2の実行コンテキストの第2のサービスとの間で第2のチャネルの確立を開始するためのものであることを示す第2のトークンを、前記第2の初期発見メッセージが含むことを識別するステップと
をさらに含む請求項1〜10のいずれか一項に記載のコンピュータ実装方法。
【請求項１２】
前記第1の実行コンテキストと前記第2の実行コンテキストとの間に前記双方向通信チャネルを確立した後、
前記第1の実行コンテキストの提示内に表示された制御要素とのユーザ対話を、前記コンピューティングシステムによって識別するステップと、
前記第1の実行コンテキストの前記提示内に表示された前記制御要素との前記ユーザ対話を識別したことに応答して、前記第1の実行コンテキストから前記第2の実行コンテキストへの前記双方向通信チャネルを介して、前記第1の実行コンテキストの前記提示内に表示された前記制御要素との前記ユーザ対話の指示を、前記コンピューティングシステムによって送信するステップと
を含む請求項1〜11のいずれか一項に記載のコンピュータ実装方法。
【請求項１３】
前記第1の実行コンテキストの前記提示内に表示された前記制御要素との前記ユーザ対話が、前記第2の実行コンテキストによって実行された前記コンテンツの提示を隠すまたは閉じるための命令を示す、請求項12に記載のコンピュータ実装方法。
【請求項１４】
1つまたは複数のプロセッサと、1つまたは複数のコンピュータ可読媒体とを含むコンピューティングシステムであって、前記1つまたは複数のコンピュータ可読記憶媒体は、実行されると、前記1つまたは複数のプロセッサに、
第1のオリジンからのコンテンツを実行する第1の実行コンテキストと、
前記第1のオリジンとは異なる第2のオリジンからのコンテンツを実行する第2の実行コンテキストと、
セキュリティアプリケーションによって実施される同一オリジンポリシーに従って、前記第1の実行コンテキストおよび前記第2の実行コンテキストの各々が他方のデータにアクセスすることを制限するセキュリティアプリケーションと
を実施させる命令で符号化され、前記第1の実行コンテキストおよび前記第2の実行コンテキストが、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された初期発見メッセージを受信することと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの識別子を決定することと、
前記第2の実行コンテキストの前記識別子を使用して、双方向通信チャネルの第1の単方向サブチャネルを確立することであり、前記第1の単方向サブチャネルが、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成される、確立することと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信することと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された前記接続ブロードキャストメッセージに基づいて、前記第1の実行コンテキストの識別子を決定することと、
前記第1の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第2の単方向サブチャネルを確立することであり、前記第2の単方向サブチャネルが、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、確立することと
を含む動作を実行することによって、前記第1の実行コンテキストと前記第2の実行コンテキストとの間でメッセージを搬送するための前記双方向通信チャネルを確立するように構成される、
コンピューティングシステム。
【請求項１５】
前記動作が、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストが前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であるかどうかをチェックすることによって、前記第1の実行コンテキストが前記第2の実行コンテキストからの前記初期発見メッセージのターゲットであったかどうかを決定することと、
前記第2の実行コンテキストが前記第1の実行コンテキストの子孫であると識別したことに応答して、
(i)前記第1の実行コンテキストが前記第2の実行コンテキストからの前記初期発見メッセージのターゲットであったと決定し、前記第1の単方向サブチャネルを確立することに進むことと、
(ii)前記第1の実行コンテキストと前記第2の実行コンテキストとの間に前記第1の単方向サブチャネルを確立することを選択することと
をさらに含む請求項14に記載のコンピューティングシステム。
【請求項１６】
前記動作が、
前記第1の実行コンテキストにおいて、前記第1のオリジン以外のオリジンからのコンテンツを実行する第3の実行コンテキストから送信された第2の初期発見メッセージを受信することであり、前記第1の実行コンテキストおよび前記第3の実行コンテキストが各々、前記コンピューティングシステムによって実施される前記同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限される、受信することと、
前記第1の実行コンテキストにおいて、前記第3の実行コンテキストが前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫であるかどうかをチェックすることによって、前記第1の実行コンテキストが前記第3の実行コンテキストからの前記第2の初期発見メッセージのターゲットであったかどうかを決定することと、
前記第3の実行コンテキストが前記第1の実行コンテキストの子孫ではないと識別したことに応答して、前記第1の実行コンテキストと前記第3の実行コンテキストとの間に通信チャネルを確立しないように前記第2の初期発見メッセージを破棄することと
をさらに含む請求項14または15に記載のコンピューティングシステム。
【請求項１７】
前記動作が、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストからの前記初期発見メッセージが前記第1の実行コンテキストと前記第2の実行コンテキストの第1のサービスとの間で第1のチャネルの確立を開始するためのものであることを示す第1のトークンを、前記初期発見メッセージが含むことを識別することと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された第2の初期発見メッセージを受信することと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストからの前記第2の初期発見メッセージが前記第1の実行コンテキストと、前記第2の実行コンテキストの前記第1のサービスとは異なる前記第2の実行コンテキストの第2のサービスとの間で第2のチャネルの確立を開始するためのものであることを示す第2のトークンを、前記第2の初期発見メッセージが含むことを識別することと
をさらに含む請求項14〜16のいずれか一項に記載のコンピューティングシステム。
【請求項１８】
コンピューティングシステムの1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、前記コンピューティングシステム上の第1の実行コンテキストと前記コンピューティングシステム上の第2の実行コンテキストとの間でデータを通信するための動作を実行させる命令を記憶した1つまたは複数のコンピュータ可読記憶媒体であって、
前記第1の実行コンテキストが、第1のオリジンからのコンテンツを実行するように構成され、
前記第2の実行コンテキストが、前記第1のオリジンとは異なる第2のオリジンからのコンテンツを実行するように構成され、
前記第1の実行コンテキストおよび前記第2の実行コンテキストが各々、前記コンピューティングシステムの同一オリジンポリシーの結果として、他方のデータにアクセスすることを制限され、前記動作が、
前記第1の実行コンテキストと前記第2の実行コンテキストとの間に双方向通信チャネルを確立することであり、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された初期発見メッセージを受信することと、
前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの識別子を決定することと、
前記第2の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第1の単方向サブチャネルを確立することであり、前記第1の単方向サブチャネルが、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成される、確立することと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信することと、
前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された前記接続ブロードキャストメッセージに基づいて、前記第1の実行コンテキストの識別子を決定することと、
前記第1の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第2の単方向サブチャネルを確立することであり、前記第2の単方向サブチャネルが、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、確立することと
を含む、確立することと、
前記双方向通信チャネルを介して前記第1の実行コンテキストと前記第2の実行コンテキストとの間でメッセージを通信することと
を含む
コンピュータ可読記憶媒体。
【請求項１９】
前記同一オリジンポリシーに従って、前記コンピューティングシステムが、前記第1のオリジンおよび前記第2のオリジンの送信プロトコル、アドレス、またはポート番号のうちの少なくとも1つが互いに異なることを識別することに応答して、前記第2のオリジンを前記第1のオリジンと異なるものとして分類する、請求項18に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記第1の実行コンテキストが、前記第1のオリジンからの前記コンテンツを提示するように構成された第1のウィンドウオブジェクトを含み、前記第2の実行コンテキストが、前記第2のオリジンからの前記コンテンツを提示するように構成された第2のウィンドウオブジェクトを含む、請求項18または19に記載のコンピュータ可読記憶媒体。
【国際調査報告】
2019532384.tif 000011
2019532384.tif 000012
2019532384.tif 000013