JP7125461B2 - 制限されたコンピュータ環境におけるクロスオリジン通信 - Google Patents

制限されたコンピュータ環境におけるクロスオリジン通信 Download PDF

Info

Publication number
JP7125461B2
JP7125461B2 JP2020184355A JP2020184355A JP7125461B2 JP 7125461 B2 JP7125461 B2 JP 7125461B2 JP 2020184355 A JP2020184355 A JP 2020184355A JP 2020184355 A JP2020184355 A JP 2020184355A JP 7125461 B2 JP7125461 B2 JP 7125461B2
Authority
JP
Japan
Prior art keywords
execution context
communication channel
execution
way communication
origin
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2020184355A
Other languages
English (en)
Other versions
JP2021015635A (ja
Inventor
マシュー・スティーヴン・フリスビー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2021015635A publication Critical patent/JP2021015635A/ja
Application granted granted Critical
Publication of JP7125461B2 publication Critical patent/JP7125461B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/20Network architectures or network communication protocols for network security for managing network security; network security policies in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/10Network architectures or network communication protocols for network security for controlling access to devices or network resources
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2119Authenticating web pages, e.g. with suspicious links

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Information Transfer Between Computers (AREA)
  • Computer And Data Communications (AREA)

Description

本明細書は、一般に、ウェブブラウザ内の異なるウィンドウ間など、コンピューティングシステム上の別々の実行コンテキスト間で通信するための技法に関する。
サーバおよびコンピューティングデバイスのハードウェアおよびソフトウェア機能の進歩は一様に、ますます洗練されたウェブページ、アプリケーションインターフェース、および他の電子文書をもたらした。たとえば、一部のウェブページは、複数のソースからのコンテンツを統合して、ユーザが他のウェブサイトに繰り返しナビゲートし、元のウェブページに戻る必要を低減する。例として、ウェブページは、ウェブページのプライマリコンテンツを提供する最上位ドキュメントと、最上位ドキュメントに他のコンテンツを埋め込む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 スマートフォン

Claims (20)

  1. コンピューティングシステム上の第1の実行コンテキストと前記コンピューティングシステム上の第2の実行コンテキストとの間でデータを通信するためのコンピュータ実装方法であって、
    前記第1の実行コンテキストが、第1のオリジンからのコンテンツを実行し、
    前記第2の実行コンテキストが、前記第1のオリジンとは異なる第2のオリジンからのコンテンツを実行し、
    前記コンピューティングシステムが、前記第1の実行コンテキストと前記第2の実行コンテキストとの間の特定の対話を制限するセキュリティポリシーを実施し、前記方法が、
    前記第1の実行コンテキストと前記第2の実行コンテキストとの間に双方向通信チャネルを確立するために、前記第1の実行コンテキストと前記第2の実行コンテキストとの間で第1のセットのメッセージを交換するステップであり、前記第1のセットのメッセージが、前記セキュリティポリシーによって制限されない、ステップと、
    前記双方向通信チャネルを確立した後に、
    前記第1の実行コンテキストまたは前記第2の実行コンテキスト内において接続サービス以外のサービスによる前記双方向通信チャネルの使用を制限するステップと、
    前記双方向通信チャネルを検証するステップであって、前記双方向通信チャネルが接続状態に設定されているか否かをチェックするステップを含む、ステップと、
    前記双方向通信チャネルが接続状態に設定されていることに応答して、前記第1の実行コンテキストまたは前記第2の実行コンテキスト内において前記サービスによる前記双方向通信チャネルの使用を制限することをやめるステップと
    を含む、コンピュータ実装方法。
  2. 前記双方向通信チャネルを確立するために、前記第1の実行コンテキストと前記第2の実行コンテキストとの間で前記第1のセットのメッセージを交換するステップが、
    前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された初期発見メッセージを受信するステップと、
    前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの識別子を決定するステップと
    を含む、請求項1に記載のコンピュータ実装方法。
  3. 前記双方向通信チャネルを確立するために、前記第1の実行コンテキストと前記第2の実行コンテキストとの間で前記第1のセットのメッセージを交換するステップが、前記第2の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第1の単方向サブチャネルを確立するステップをさらに含み、前記第1の単方向サブチャネルが、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成される、請求項2に記載のコンピュータ実装方法。
  4. 前記双方向通信チャネルを確立するために、前記第1の実行コンテキストと前記第2の実行コンテキストとの間で前記第1のセットのメッセージを交換するステップが、
    前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信するステップと、
    前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された前記接続ブロードキャストメッセージに基づいて、前記第1の実行コンテキストの識別子を決定するステップと、
    前記第1の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第2の単方向サブチャネルを確立するステップであり、前記第2の単方向サブチャネルが、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、ステップと
    をさらに含む、請求項3に記載のコンピュータ実装方法。
  5. 前記第1の実行コンテキストが、前記第1のオリジンからの前記コンテンツを提示するように構成された第1のウィンドウオブジェクトを含み、前記第2の実行コンテキストが、前記第2のオリジンからの前記コンテンツを提示するように構成された第2のウィンドウオブジェクトを含む、請求項1に記載のコンピュータ実装方法。
  6. 前記第1のウィンドウオブジェクトに提示された前記コンテンツが、前記第1のオリジンに関連付けられた第1のドメインにおいて1つまたは複数のサーバによってホストされる第1のウェブページを含み、
    前記第2のウィンドウオブジェクトに提示された前記コンテンツが、前記第2のオリジンに関連付けられた第2のドメインにおいて1つまたは複数のサーバによってホストされる第2のウェブページを含み、
    前記第2のウィンドウオブジェクトが、前記第1のウェブページに埋め込まれているインラインフレーム(iFrame)である
    請求項5に記載のコンピュータ実装方法。
  7. 前記コンピューティングシステムのウェブブラウジングアプリケーションにより前記第1の実行コンテキストおよび前記第2の実行コンテキストを生成するステップ
    をさらに含み、
    前記第1の単方向サブチャネルが、前記ウェブブラウジングアプリケーションのpostMessageアプリケーションプログラミングインターフェース(API)を使用して、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成され、
    前記第2の単方向サブチャネルが、前記ウェブブラウジングアプリケーションの前記postMessage APIを使用して、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される
    請求項4に記載のコンピュータ実装方法。
  8. 前記第2の実行コンテキストが、前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫である、請求項1に記載のコンピュータ実装方法。
  9. 前記双方向通信チャネルを検証するステップが、
    前記接続サービスによって、前記第2の実行コンテキストから前記第1の実行コンテキストに、第1のチャネル接続メッセージを送信するステップであり、前記第1のチャネル接続メッセージが、前記第1の実行コンテキストに、前記双方向通信チャネルを接続状態に設定するように命令し、前記接続状態では、前記第1の実行コンテキストにおけるサービスによる前記双方向通信チャネルの使用に対する制限が解除される、ステップと、
    前記接続サービスによって、前記第1の実行コンテキストから前記第2の実行コンテキストに、第2のチャネル接続メッセージを送信するステップであり、前記第2のチャネル接続メッセージが、前記第2の実行コンテキストに、前記双方向通信チャネルを接続状態に設定するように命令し、前記接続状態では、前記第2の実行コンテキストにおけるサービスによる前記双方向通信チャネルの使用に対する制限が解除される、ステップと、
    を含む、
    請求項1に記載のコンピュータ実装方法。
  10. 前記第1のチャネル接続メッセージについてのリスナーを前記第1の実行コンテキスト内に設定するステップと、
    前記リスナーが前記第1のチャネル接続メッセージの受信を検出すると、前記第1の実行コンテキストにおける前記サービスによる前記双方向通信チャネルの使用に対する制限を解除するステップと
    をさらに含む、請求項9に記載のコンピュータ実装方法。
  11. コンピューティングシステムの1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、前記コンピューティングシステム上の第1の実行コンテキストと前記コンピューティングシステム上の第2の実行コンテキストとの間でデータを通信するための動作を実行させる命令を記憶した1つまたは複数の非一時的コンピュータ可読媒体であって、
    前記第1の実行コンテキストが、第1のオリジンからのコンテンツを実行し、
    前記第2の実行コンテキストが、前記第1のオリジンとは異なる第2のオリジンからのコンテンツを実行し、
    前記コンピューティングシステムが、前記第1の実行コンテキストと前記第2の実行コンテキストとの間の特定の対話を制限するセキュリティポリシーを実施し、前記動作が、
    前記第1の実行コンテキストと前記第2の実行コンテキストとの間に双方向通信チャネルを確立するために、前記第1の実行コンテキストと前記第2の実行コンテキストとの間で第1のセットのメッセージを交換することであり、前記第1のセットのメッセージが、前記セキュリティポリシーによって制限されない、ことと
    前記双方向通信チャネルを確立した後に、
    前記第1の実行コンテキストまたは前記第2の実行コンテキスト内において接続サービス以外のサービスによる前記双方向通信チャネルの使用を制限することと、
    前記双方向通信チャネルを検証することであって、前記双方向通信チャネルが接続状態に設定されているか否かをチェックするステップを含む、ことと、
    前記双方向通信チャネルが接続状態に設定されていることに応答して、前記第1の実行コンテキストまたは前記第2の実行コンテキスト内において前記サービスによる前記双方向通信チャネルの使用を制限することをやめることと
    を含む、1つまたは複数の非一時的コンピュータ可読媒体。
  12. 前記双方向通信チャネルを確立するために、前記第1の実行コンテキストと前記第2の実行コンテキストとの間で第1のセットのメッセージを交換することが、
    前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された初期発見メッセージを受信することと、
    前記第1の実行コンテキストにおいて、前記第2の実行コンテキストから送信された前記初期発見メッセージに基づいて、前記第2の実行コンテキストの識別子を決定することと
    を含む、請求項11に記載の1つまたは複数の非一時的コンピュータ可読媒体。
  13. 前記双方向通信チャネルを確立するために、前記第1の実行コンテキストと前記第2の実行コンテキストとの間で前記第1のセットのメッセージを交換することが、前記第2の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第1の単方向サブチャネルを確立することをさらに含み、前記第1の単方向サブチャネルが、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成される、請求項12に記載の1つまたは複数の非一時的コンピュータ可読媒体。
  14. 前記双方向通信チャネルを確立するために、前記第1の実行コンテキストと前記第2の実行コンテキストとの間で前記第1のセットのメッセージを交換することが、
    前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された接続ブロードキャストメッセージを受信することと、
    前記第2の実行コンテキストにおいて、前記第1の単方向サブチャネルを介して前記第1の実行コンテキストから送信された前記接続ブロードキャストメッセージに基づいて、前記第1の実行コンテキストの識別子を決定することと、
    前記第1の実行コンテキストの前記識別子を使用して、前記双方向通信チャネルの第2の単方向サブチャネルを確立することであり、前記第2の単方向サブチャネルが、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、ことと
    をさらに含む、請求項13に記載の1つまたは複数の非一時的コンピュータ可読媒体。
  15. 前記第1の実行コンテキストが、前記第1のオリジンからの前記コンテンツを提示するように構成された第1のウィンドウオブジェクトを含み、前記第2の実行コンテキストが、前記第2のオリジンからの前記コンテンツを提示するように構成された第2のウィンドウオブジェクトを含む、請求項11に記載の1つまたは複数の非一時的コンピュータ可読媒体。
  16. 前記第1のウィンドウオブジェクトに提示された前記コンテンツが、前記第1のオリジンに関連付けられた第1のドメインにおいて1つまたは複数のサーバによってホストされる第1のウェブページを含み、
    前記第2のウィンドウオブジェクトに提示された前記コンテンツが、前記第2のオリジンに関連付けられた第2のドメインにおいて1つまたは複数のサーバによってホストされる第2のウェブページを含み、
    前記第2のウィンドウオブジェクトが、前記第1のウェブページに埋め込まれているインラインフレーム(iFrame)である
    請求項15に記載の1つまたは複数の非一時的コンピュータ可読媒体。
  17. 前記コンピューティングシステムのウェブブラウジングアプリケーションにより前記第1の実行コンテキストおよび前記第2の実行コンテキストを生成すること
    をさらに含み、
    前記第1の単方向サブチャネルが、前記ウェブブラウジングアプリケーションのpostMessageアプリケーションプログラミングインターフェース(API)を使用して、前記第1の実行コンテキストから前記第2の実行コンテキストにメッセージを搬送するように構成され、
    前記第2の単方向サブチャネルが、前記ウェブブラウジングアプリケーションの前記postMessage APIを使用して、前記第2の実行コンテキストから前記第1の実行コンテキストにメッセージを搬送するように構成される、
    請求項14に記載の1つまたは複数の非一時的コンピュータ可読媒体。
  18. 前記第2の実行コンテキストが、前記コンピューティングシステム上の実行コンテキストの階層における前記第1の実行コンテキストの子孫である、請求項11に記載の1つまたは複数の非一時的コンピュータ可読媒体。
  19. 前記双方向通信チャネルを検証することが、
    前記接続サービスによって、前記第2の実行コンテキストから前記第1の実行コンテキストに、第1のチャネル接続メッセージを送信することであり、前記第1のチャネル接続メッセージが、前記第1の実行コンテキストに、前記双方向通信チャネルを接続状態に設定するように命令し、前記接続状態では、前記第1の実行コンテキストにおけるサービスによる前記双方向通信チャネルの使用に対する制限が解除される、ことと、
    前記接続サービスによって、前記第1の実行コンテキストから前記第2の実行コンテキストに、第2のチャネル接続メッセージを送信することであり、前記第2のチャネル接続メッセージが、前記第2の実行コンテキストに、前記双方向通信チャネルを接続状態に設定するように命令し、前記接続状態では、前記第2の実行コンテキストにおけるサービスによる前記双方向通信チャネルの使用に対する制限が解除される、ことと、
    を含む、
    請求項11に記載の1つまたは複数の非一時的コンピュータ可読媒体。
  20. 前記第1のチャネル接続メッセージについてのリスナーを前記第1の実行コンテキスト内に設定することと、
    前記リスナーが前記第1のチャネル接続メッセージの受信を検出すると、前記第1の実行コンテキストにおける前記サービスによる前記双方向通信チャネルの使用に対する制限を解除することと
    をさらに含む、請求項19に記載の1つまたは複数の非一時的コンピュータ可読媒体。
JP2020184355A 2017-06-16 2020-11-04 制限されたコンピュータ環境におけるクロスオリジン通信 Active JP7125461B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/624,921 US10554692B2 (en) 2017-06-16 2017-06-16 Cross-origin communication in restricted computer environments
US15/624,921 2017-06-16

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2019507289A Division JP6790231B2 (ja) 2017-06-16 2018-03-14 制限されたコンピュータ環境におけるクロスオリジン通信

Publications (2)

Publication Number Publication Date
JP2021015635A JP2021015635A (ja) 2021-02-12
JP7125461B2 true JP7125461B2 (ja) 2022-08-24

Family

ID=61899370

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2019507289A Active JP6790231B2 (ja) 2017-06-16 2018-03-14 制限されたコンピュータ環境におけるクロスオリジン通信
JP2020184355A Active JP7125461B2 (ja) 2017-06-16 2020-11-04 制限されたコンピュータ環境におけるクロスオリジン通信

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2019507289A Active JP6790231B2 (ja) 2017-06-16 2018-03-14 制限されたコンピュータ環境におけるクロスオリジン通信

Country Status (6)

Country Link
US (2) US10554692B2 (ja)
EP (1) EP3482333B1 (ja)
JP (2) JP6790231B2 (ja)
KR (1) KR102156305B1 (ja)
CN (2) CN116956273A (ja)
WO (1) WO2018231304A1 (ja)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10452738B1 (en) * 2017-02-21 2019-10-22 United Services Automobile Association (Usaa) Coordinating in-frame content with page content in applications
US10452762B1 (en) * 2017-02-21 2019-10-22 United Services Automobile Association (Usaa) Coordinating in-frame content with page content in applications
US10554692B2 (en) 2017-06-16 2020-02-04 Google Llc Cross-origin communication in restricted computer environments
US11206273B2 (en) * 2018-01-31 2021-12-21 Salesforce.Com, Inc. Content management system connect
EP3610378B1 (en) * 2018-05-07 2020-11-11 Google LLC Immersive web-based simulator for digital assistant-based applications
US10678615B1 (en) 2018-05-22 2020-06-09 Express Scripts Strategic Development, Inc. Interconnected framework for distributed data realization
US11354369B2 (en) * 2019-08-13 2022-06-07 Raytheon Company Multi-headed web-application architecture and messaging structure
US11171926B2 (en) * 2019-09-04 2021-11-09 Microsoft Technology Licensing, Llc Secure communication between web frames
US11755720B2 (en) 2020-01-31 2023-09-12 Salesforce, Inc. Secure membranes and cross namespace communication
US11611629B2 (en) * 2020-05-13 2023-03-21 Microsoft Technology Licensing, Llc Inline frame monitoring
US11677739B2 (en) * 2021-06-25 2023-06-13 Microsoft Technology Licensing, Llc Token brokering in parent frame on behalf of child frame
US11882113B2 (en) 2021-06-29 2024-01-23 Microsoft Technology Licensing, Llc Token brokering in a descendant frame

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090328063A1 (en) 2008-06-27 2009-12-31 Microsoft Corporation Inter-frame messaging between different domains
US20110154130A1 (en) 2009-12-22 2011-06-23 Nokia Corporation Method and apparatus for secure cross-site scripting
JP5017453B2 (ja) 2007-08-27 2012-09-05 ヤフー! インコーポレイテッド 安全なモジュール間通信機構
US20140259027A1 (en) 2013-03-06 2014-09-11 Microsoft Corporation Browser window frame-to-frame communication
US20150213259A1 (en) 2014-01-27 2015-07-30 Microsoft Corporation Web Service Sandbox System
US20150350253A1 (en) 2014-05-29 2015-12-03 Livestax Limited Communication between frames of a web browser

Family Cites Families (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3055268B2 (ja) 1990-12-05 2000-06-26 日産化学工業株式会社 ウラシル誘導体および除草剤
US6957416B2 (en) 2001-01-31 2005-10-18 Hewlett-Packard Development Company, L.P. Document builder classes and methods
US7715377B2 (en) 2002-01-03 2010-05-11 Integrated Device Technology, Inc. Apparatus and method for matrix memory switching element
US20040210536A1 (en) 2002-12-18 2004-10-21 Tino Gudelj Cross-domain transactions through simulated pop-ups
JP2005017453A (ja) * 2003-06-24 2005-01-20 Murata Mach Ltd 画像形成装置
US8280819B2 (en) 2004-07-09 2012-10-02 Ebay Inc. Method and apparatus for securely displaying and communicating trusted and untrusted internet content
US8005920B2 (en) 2005-08-24 2011-08-23 Postx Corporation Method and apparatus for transmitting arbitrarily large amounts of data over the internet
US7506248B2 (en) 2005-10-14 2009-03-17 Ebay Inc. Asynchronously loading dynamically generated content across multiple internet domains
EP2541430A2 (en) 2005-12-22 2013-01-02 Catalog.Com, Inc. Social network-enabled interactive media player
US8185737B2 (en) 2006-06-23 2012-05-22 Microsoft Corporation Communication across domains
US8250082B2 (en) 2006-06-23 2012-08-21 Microsoft Corporation Cross domain communication
US8001336B2 (en) * 2007-03-02 2011-08-16 International Business Machines Corporation Deterministic memory management in a computing environment
US7958516B2 (en) 2007-04-18 2011-06-07 Google Inc Controlling communication within a container document
US7809785B2 (en) 2007-05-28 2010-10-05 Google Inc. System using router in a web browser for inter-domain communication
US10019570B2 (en) 2007-06-14 2018-07-10 Microsoft Technology Licensing, Llc Protection and communication abstractions for web browsers
US8081603B2 (en) * 2007-07-18 2011-12-20 Qualcomm Incorporated Compression static and semi-static context transfer
US20090083768A1 (en) * 2007-09-20 2009-03-26 Hatalkar Atul N Context platform framework for aggregation, analysis and use of contextual information
US9009657B2 (en) 2008-04-20 2015-04-14 Microsoft Technology Licensing, Llc Component-oriented architecture for web mashups
US8291475B2 (en) 2008-04-30 2012-10-16 Microsoft Corporation Secure cross-domain communication for web mashups
US20090299862A1 (en) 2008-06-03 2009-12-03 Microsoft Corporation Online ad serving
US9524344B2 (en) 2008-06-03 2016-12-20 Microsoft Corporation User interface for online ads
US9459936B2 (en) * 2009-05-01 2016-10-04 Kaazing Corporation Enterprise client-server system and methods of providing web application support through distributed emulation of websocket communications
US20110188499A1 (en) * 2010-02-04 2011-08-04 Cisco Technology, Inc. Point-to-multipoint path implementation in a multicast virtual private network
WO2011116048A1 (en) 2010-03-16 2011-09-22 Appnexus, Inc. Advertising server and media management platform
US9558289B2 (en) * 2010-09-30 2017-01-31 Microsoft Technology Licensing, Llc Securely rendering online ads in a host page
US9037963B1 (en) 2011-04-22 2015-05-19 Amazon Technologies, Inc. Secure cross-domain web browser communications
US9215096B2 (en) * 2011-08-26 2015-12-15 Salesforce.Com, Inc. Computer implemented methods and apparatus for providing communication between network domains in a service cloud
US8365061B1 (en) * 2011-11-02 2013-01-29 Google Inc. Cross-origin communication in browser frames
US10049168B2 (en) 2012-01-31 2018-08-14 Openwave Mobility, Inc. Systems and methods for modifying webpage data
US9286276B2 (en) * 2012-06-11 2016-03-15 Google Inc. System and method of document embedding in collaborative editors
US20140047413A1 (en) 2012-08-09 2014-02-13 Modit, Inc. Developing, Modifying, and Using Applications
US9332090B1 (en) * 2012-09-12 2016-05-03 Kaazing Corporation Communication data padding
GB201218389D0 (en) * 2012-10-12 2012-11-28 Uni I Olso Multi-mode computer with selector
US8930971B1 (en) * 2013-09-13 2015-01-06 Linkedin Corporation Embedded-advertising content presented in document context
US9189466B2 (en) 2013-09-13 2015-11-17 Linkedin Corporation Cross document communication
US9864528B2 (en) 2014-10-16 2018-01-09 Microsoft Technology Licensing, Llc Data object observation among domain-restricted containers
US9880869B2 (en) * 2015-01-13 2018-01-30 Owl Cyber Defense Solutions, Llc Single computer-based virtual cross-domain solutions
US20160342977A1 (en) 2015-05-20 2016-11-24 Vennd.io Pty Ltd Device, method and system for virtual asset transactions
JP6868958B2 (ja) * 2015-12-25 2021-05-12 富士通株式会社 パケット送信プログラム、情報処理装置、および、障害検出方法
US10554692B2 (en) 2017-06-16 2020-02-04 Google Llc Cross-origin communication in restricted computer environments

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5017453B2 (ja) 2007-08-27 2012-09-05 ヤフー! インコーポレイテッド 安全なモジュール間通信機構
US20090328063A1 (en) 2008-06-27 2009-12-31 Microsoft Corporation Inter-frame messaging between different domains
US20110154130A1 (en) 2009-12-22 2011-06-23 Nokia Corporation Method and apparatus for secure cross-site scripting
US20140259027A1 (en) 2013-03-06 2014-09-11 Microsoft Corporation Browser window frame-to-frame communication
US20150213259A1 (en) 2014-01-27 2015-07-30 Microsoft Corporation Web Service Sandbox System
CN105940409A (zh) 2014-01-27 2016-09-14 微软技术许可有限责任公司 网络服务沙箱系统
US20150350253A1 (en) 2014-05-29 2015-12-03 Livestax Limited Communication between frames of a web browser

Also Published As

Publication number Publication date
JP6790231B2 (ja) 2020-11-25
KR102156305B1 (ko) 2020-09-15
US20180367572A1 (en) 2018-12-20
EP3482333A1 (en) 2019-05-15
US11171993B2 (en) 2021-11-09
JP2021015635A (ja) 2021-02-12
KR20190028479A (ko) 2019-03-18
US10554692B2 (en) 2020-02-04
EP3482333B1 (en) 2019-11-27
WO2018231304A1 (en) 2018-12-20
CN109804377A (zh) 2019-05-24
JP2019532384A (ja) 2019-11-07
CN109804377B (zh) 2023-06-20
US20200137120A1 (en) 2020-04-30
CN116956273A (zh) 2023-10-27

Similar Documents

Publication Publication Date Title
JP7125461B2 (ja) 制限されたコンピュータ環境におけるクロスオリジン通信
US11539807B2 (en) Systems and methods for web to mobile app correlation
US8843820B1 (en) Content script blacklisting for use with browser extensions
US8789204B2 (en) Method and apparatus for secure cross-site scripting
US8935755B1 (en) Managing permissions and capabilities of web applications and browser extensions based on install location
US10187419B2 (en) Method and system for processing notification messages of a website
US9047393B1 (en) Cross-domain communications with a shared worker application
US8626865B1 (en) Shared worker application
US9948592B1 (en) Managing notifications across services
US20140282032A1 (en) Dynamically configuring user experiences with action uniform resource identifiers
US9195479B2 (en) Selective notification of native applications
US20170200200A1 (en) Utilizing a secondary application to render invitational content
CN112088362A (zh) 针对已保存站点的通知更新
CN115587575A (zh) 数据表创建方法、目标数据查询方法、装置及设备
US20130332806A1 (en) Collecting Web Pages/Links from Communications and Documents for Later Reading
US20170048181A1 (en) Method and System for Creating Dynamic Email Signatures
US10257139B2 (en) Facilitating access to resource(s) identified by reference(s) in electronic communications
EP4359977A1 (en) Proxy services for controlling the persistency, utilization, & dissemination of information provided to a service worker
US10380614B1 (en) User reset voting to identify unwanted settings values in client software
JP6845344B2 (ja) データ漏洩リスクの評価
US11960827B1 (en) Filling field on user interface based on content of message
US9251361B1 (en) Data transmission to an untrusted entity
US10375180B2 (en) Following content posting entities
CN113760835A (zh) 日志管理方法、中台系统、电子设备和存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201109

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220309

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220719

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220812

R150 Certificate of patent or registration of utility model

Ref document number: 7125461

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150