8.7 ~systemの状態と能力

8.7.1. `Navigator^I ~obj

`Window$I ~interfaceの `navigator@m 属性の取得子は、 `Navigator$I ~interfaceの~instanceを返さ~MUST — それは、~UA(~client)の同一性と状態を表現し、~Web頁が あり得る~protocol~handlerとして,自身を登録できるようにする: ◎ The navigator attribute of the Window interface must return an instance of the Navigator interface, which represents the identity and state of the user agent (the client), and allows Web pages to register themselves as potential protocol handlers:

[Exposed=Window]
interface `Navigator@I {
  /* 
この~interfaceを実装している~objは、下に与える~interfaceも実装する。
◎
objects implementing this interface also implement the interfaces given below
 */
};
`Navigator$I implements `NavigatorID$I;
`Navigator$I implements `NavigatorLanguage$I;
`Navigator$I implements `NavigatorOnLine$I;
`Navigator$I implements `NavigatorContentUtils$I;
`Navigator$I implements `NavigatorCookies$I;
`Navigator$I implements `NavigatorPlugins$I;
`Navigator$I implements `NavigatorConcurrentHardware$I;

これらの~interfaceが別々に定義されるのは、 `WorkerNavigator$I が `Navigator$I ~interfaceの各 部位を再利用できるようにするためである。 ◎ These interfaces are defined separately so that WorkerNavigator can re-use parts of the Navigator interface.

8.7.1.1. ~clientの識別

[`NoInterfaceObject$, `Exposed$=(Window,Worker)]
interface `NavigatorID@I {
  readonly attribute DOMString `appCodeName$m; /* 
常に `Mozilla^l
◎
constant "Mozilla"
 */
  readonly attribute DOMString `appName$m; /* 
常に `Netscape^l
◎
constant "Netscape"
 */
  readonly attribute DOMString `appVersion$m;
  readonly attribute DOMString `platform$m;
  readonly attribute DOMString `product$m; /* 
常に `Gecko^l
◎
constant "Gecko"
 */
  [`Exposed$=Window] readonly attribute DOMString `productSub$m;
  readonly attribute DOMString `userAgent$m;
  [`Exposed$=Window] readonly attribute DOMString `vendor$m;
  [`Exposed$=Window] readonly attribute DOMString `vendorSub$m; /* 
常に空~文字列
◎
constant ""
 */
};

産業界における最善労力にもかかわらず,ある種の事例では、~web~browserには,~Web作者に対処を強いるような~bugや制限がある。 ◎ In certain cases, despite the best efforts of the entire industry, Web browsers have bugs and limitations that Web authors are forced to work around.

この節では、これらの課題に対処するため,~scriptから利用-中の~UAの種類を決定するために利用できる 一連の属性を定義する。 ◎ This section defines a collection of attributes that can be used to determine, from script, the kind of user agent in use, in order to work around these issues.

~UAは、次のいずれかを値にとる `~navigator互換性~mode@ を持つ ⇒ `Chrome^i, `Gecko^i, `WebKit^i ◎ The user agent has a navigator compatibility mode, which is either Chrome, Gecko, or WebKit.

注記: `~navigator互換性~mode$は、 `NavigatorID$I ~interfaceにおける[ 各種 属性~値, [ `taintEnabled()$m / `oscpu$m ]の有無 ]を,[ 既存の~Web内容と互換であることが既知である組合せ ]に拘束する。 ◎ The navigator compatibility mode constrains the NavigatorID interface to the combinations of attribute values and presence of taintEnabled() and oscpu that are known to be compatible with existing Web content.

~client検出は、常に,既知である現在の~versionを検出するものに制限される~SHOULDである — 将来の/未知の~versionは、常に,全部的に準拠するものと見做される~SHOULDである。 ◎ Client detection should always be limited to detecting known current versions; future versions and unknown versions should always be assumed to be fully compliant.

%self . `navigator$m . `appCodeName$m
文字列 `Mozilla^l を返す。 ◎ Returns the string "Mozilla".
%self . `navigator$m . `appName$m
文字列 `Netscape^l を返す。 ◎ Returns the string "Netscape".

%self . `navigator$m . `appVersion$m
~browserの~versionを返す。 ◎ Returns the version of the browser.
%self . `navigator$m . `platform$m
~platformの名前を返す。 ◎ Returns the name of the platform.
%self . `navigator$m . `product$m
文字列 `Gecko^l を返す。 ◎ Returns the string "Gecko".
%window . `navigator$m . `productSub$m
文字列[ `20030107^l, `20100101^l ]いずれかを返す。 ◎ Returns either the string "20030107", or the string "20100101".
%self . `navigator$m . `userAgent$m
完全な `User-Agent^h ~headerを返す。 ◎ Returns the complete `User-Agent` header.
%window . `navigator$m . `vendor$m
次のいずれかの文字列を返す ⇒ 空~文字列, `Apple Computer, Inc.^l, `Google Inc.^l ◎ Returns either the empty string, the string "Apple Computer, Inc.", or the string "Google Inc.".
%window . `navigator$m . `vendorSub$m
空~文字列を返す。 ◎ Returns the empty string.

【 “%window . …” は `Window^I にのみ公開され,~worker環境では利用できない( [`Exposed$=Window] )。 】

`appCodeName@m
文字列 `Mozilla^l を返さ~MUST。 ◎ Must return the string "Mozilla".
`appName@m
文字列 `Netscape^l を返さ~MUST。 ◎ Must return the string "Netscape".
`appVersion@m
[ 文字列 `4.0^l, または ~browserの~versionを詳細に表現する文字列 ]を返さ~MUST。 ◎ Must return either the string "4.0" or a string representing the version of the browser in detail,\
例: `1.0 (VMS; en-US) Mellblomenator/9000^l ◎ e.g. "1.0 (VMS; en-US) Mellblomenator/9000".
`platform@m
[ 空~文字列, または ~browserを実行している~platformを表現する文字列 ]を返さ~MUST。 ◎ Must return either the empty string or a string representing the platform on which the browser is executing,\
例: `MacIntel^l / `Win32^l / `FreeBSD i386^l / `WebTV OS^l ◎ e.g. "MacIntel", "Win32", "FreeBSD i386", "WebTV OS".
`product@m
文字列 `Gecko^l を返さ~MUST。 ◎ Must return the string "Gecko".
`productSub@m
`~navigator互換性~mode$に応じて,次に与える文字列を返さ~MUST ⇒# `Chrome^i ならば `20030107^l / `WebKit^i ならば `20030107^l / `Gecko^i ならば `20100101^l ◎ Must return the appropriate string from the following list: ◎ If the navigator compatibility mode is Chrome or WebKit • The string "20030107". ◎ If the navigator compatibility mode is Gecko • The string "20100101".
`userAgent@m
`既定の~User-Agent値$を返さ~MUST。 ◎ Must return the default `User-Agent` value.
`vendor@m

`~navigator互換性~mode$に応じて,次に与える文字列を返さ~MUST ⇒# `Chrome^i ならば `Google Inc.^l / `Gecko^i ならば 空~文字列 / `WebKit^i ならば `Apple Computer, Inc.^l ◎ Must return the appropriate string from the following list: ◎ If the navigator compatibility mode is Chrome • The string "Google Inc.". ◎ If the navigator compatibility mode is Gecko • The empty string. ◎ If the navigator compatibility mode is WebKit • The string "Apple Computer, Inc.".

`vendorSub@m
空~文字列を返さ~MUST。 ◎ Must return the empty string.

[ `~navigator互換性~mode$ ~EQ `Gecko^i ]の場合、~UAは,次の部分的~interfaceも~supportし~MUST: ◎ If the navigator compatibility mode is Gecko, then the user agent must also support the following partial interface:

`taintEnabled()@m
~F を返さ~MUST。 ◎ The taintEnabled() method must return false.
`oscpu@m
取得子は、空~文字列 または ~browserを実行している~platformを表現する文字列を返さ~MUST。 ◎ The oscpu attribute's getter must return either the empty string or a string representing the platform on which the browser is executing,\
例: `Windows NT 10.0; Win64; x64^l / `Linux x86_64^l ◎ e.g. "Windows NT 10.0; Win64; x64", "Linux x86_64".
【 "oscpu" = “OS + CPU” 】

この~APIにおける 利用者ごとに変わるような どの情報も、利用者を~profileするために利用され得る。 事実,そのような情報が十分~可用にされた場合、利用者は実際に一意に識別され得る。 この理由から、~UA実装者には,この~APIには 可能な限り少ない情報を含めることが,強く督促される。 ~FINGERPRINTING ◎ Any information in this API that varies from user to user can be used to profile the user. In fact, if enough such information is available, a user can actually be uniquely identified. For this reason, user agent implementers are strongly urged to include as little information in this API as possible. (This is a fingerprinting vector.)

8.7.1.2. 言語~選好

[`NoInterfaceObject$, `Exposed$=(Window,Worker)]
interface `NavigatorLanguage@I {
  readonly attribute DOMString `language$m;
  readonly attribute FrozenArray<DOMString> `languages$m;
};
%self . `navigator$m . `language$m
利用者が最も選好する言語を表現する,言語~tagを返す。 ◎ Returns a language tag representing the user's preferred language.
%self . `navigator$m . `languages$m
利用者が選好する言語たちを表現する,言語~tagからなる配列を返す — 最も選好する言語が最初に来る。 ◎ Returns an array of language tags representing the user's preferred languages, with the most preferred language first. ◎ The most preferred language is the one returned by navigator.language.

注記: `languagechange$et ~eventは、[ ~UAが解する所の,利用者が選好する言語 ]が変化したとき,[ `Window$I / `WorkerGlobalScope$I ]~objに向けて発火される。 ◎ A languagechange event is fired at the Window or WorkerGlobalScope object when the user agent's understanding of what the user's preferred languages are changes.

`language@m
`確からしい言語$,または, 利用者が最も選好する言語を表現する,妥当な BCP 47 言語~tagを返さ~MUST。 `BCP47$r ◎ Must return a valid BCP 47 language tag representing either a plausible language or the user's most preferred language. [BCP47]
`languages@m
1 個~以上の[ `確からしい言語$, または 利用者が選好する言語 ]を表現するような,妥当な一連の BCP 47 言語~tagからなる `凍結~配列$を返さ~MUST — それらの順序は最も選好される言語からとする。 ~UAが[ 異なる値または 順序で値を返す必要が生じる ]までは、同じ~objが返され~MUST。 `BCP47$r ◎ Must return a frozen array of valid BCP 47 language tags representing either one or more plausible languages, or the user's preferred languages, ordered by preference with the most preferred language first. The same object must be returned until the user agent needs to return different values, or values in a different order. [BCP47]
~UAは、[[ `Window$I / `WorkerGlobalScope$I ]~obj %O の `navigator.languages$m 属性が新たな言語~tagの集合を返す ]ようにする必要が生じたときは、 %O に向けて,名前 `languagechange$et の`~eventを発火-$する `~taskを~queueする$ことに加えて、新たな値を実際に返す前に,その~taskが実行され始めるのを待機し~MUST。 ◎ Whenever the user agent needs to make the navigator.languages attribute of a Window or WorkerGlobalScope object return a new set of language tags, the user agent must queue a task to fire an event named languagechange at the Window or WorkerGlobalScope object and wait until that task begins to be executed before actually returning a new value.
この`~task$の`~task源$は、`~DOM操作~task源$とする。 ◎ The task source for this task is the DOM manipulation task source.

~UAは、 `確からしい言語@ を決定する際に,次を念頭に置く~SHOULDである: ◎ To determine a plausible language, the user agent should bear in mind the following:

  • この~APIにおける利用者ごとに変わるような情報は、利用者を[ ~profileする/識別する ]ために利用され得る。 ~FINGERPRINTING ◎ Any information in this API that varies from user to user can be used to profile or identify the user. (This is a fingerprinting vector.)
  • 利用者が出自を~~隠す~service(例: Tor などの匿名性~network)を利用していない場合、出自が類似する利用者たち(例えば,同じ~IP-address-blockからの)が最も互いに判別されにくい値は,そのような利用者たちの大多数が利用している言語である。 `TOR$r ◎ If the user is not using a service that obfuscates the user's point of origin (e.g. the Tor anonymity network), then the value that is least likely to distinguish the user from other users with similar origins (e.g. from the same IP address block) is the language used by the majority of such users. [TOR]
  • 利用者が匿名~serviceを利用していて、互いの利用者が判別される可能性を抑制するためとして,同じ値を利用する場合、その値には, `en-US^l が示唆される。 ◎ If the user is using an anonymizing service, then the value "en-US" is suggested; if all users of the service use that same value, that reduces the possibility of distinguishing the users from each other.

これ以上の指紋収集路が導入されないよう、~UAは,この関数に定義される~APIに対しては,同じ~listを利用する~SHOULDである — ~HTTP `Accept-Language$h ~headerのときと同じく。 ~FINGERPRINTING ◎ To avoid introducing any more fingerprinting vectors, user agents should use the same list for the APIs defined in this function as for the HTTP `Accept-Language` header. (This is a fingerprinting vector.)

8.7.1.3. ~custom~scheme~handler: `registerProtocolHandler()^m ~method

[Exposed=Window,
`NoInterfaceObject$]
interface `NavigatorContentUtils@I {
  void `registerProtocolHandler$m(DOMString %scheme, USVString %url, DOMString %title);
  void `unregisterProtocolHandler$m(DOMString %scheme, USVString %url);
};

`registerProtocolHandler()@m ~methodは、~Web~siteが自身を 特定0の~schemeに対する可能な~handlerとして登録できるようにする。 例えば,~online-telephone-messaging~serviceは、自身を `sms:^sc ~schemeに対する~handlerとして登録することもできる — 利用者がそのような~linkを~clickしたときに、その~Web~siteを利用する機会が与えられるように。 `SMS$r ◎ The registerProtocolHandler() method allows Web sites to register themselves as possible handlers for particular schemes. For example, an online telephone messaging service could register itself as a handler of the sms: scheme, so that if the user clicks on such a link, they are given the opportunity to use that web site. [SMS]

%window . `navigator$m . `registerProtocolHandler(scheme, url, title)$m
%scheme に与えた~schemeに対する~handlerとして, %url に与えた~URLを登録する — その~titleに %title を伴わせて。 ◎ Registers a handler for the given scheme, at the given URL, with the given title.
~URL内の文字列 `%s^l は、[ 取扱われることになる内容の~URL ]に置き換えられる仮入力として利用される。 ◎ The string "%s" in the URL is used as a placeholder for where to put the URL of the content to be handled.

次に該当する場合、 `SecurityError$E が投出される:

  • ~UAが登録を阻止する場合(具体例として, `http^sc に対する~handlerを登録しようと試行した場合に起こるであろう)。
  • %url 内に文字列 `%s^l が見当たらない場合。
  • %url が~siteの~URLと`同一生成元$でない場合。 【この項目は訳者による補完。】
◎ Throws a "SecurityError" DOMException if the user agent blocks the registration (this might happen if trying to register as a handler for "http", for instance). ◎ Throws a "SyntaxError" DOMException if the "%s" string is missing in the URL.

~UAは、この~methodが~callされたときには,この節に述べる拘束の中で,好きに行ってよい。 具体例として、次に挙げるいずれかを行うこともできる: ◎ User agents may, within the constraints described in this section, do whatever they like when the method is called. A UA could, for instance,\

  • 利用者に~promptして,[ ~handlerの選抜listに~siteを追加する / 既定の~handlerにする / 要請を取消す ]機会を提供0する。 ◎ prompt the user and offer the user the opportunity to add the site to a shortlist of handlers, or\
  • 前項のような~UIを[ ~modal~UI / ~modalでない一過性の通知~UI ]を通して提供する。 ◎ make the handlers their default, or cancel the request. UAs could provide such a UI through modal UI or through a non-modal transient notification interface.\
  • 単純に黙って情報を収集しておいた上で、利用者に関連するときに限り,前項のような~UIを提供する。 ◎ UAs could also simply silently collect the information, providing it only when relevant to the user.

~UAは、同じ要請が利用者に繰り返し~promptされないよう,どの~siteが どの~handlerを登録したか追跡し続ける~SHOULDである(利用者が登録を辞退した場合も含めて)。 ◎ User agents should keep track of which sites have registered handlers (even if the user has declined such registrations) so that the user is not repeatedly prompted with the same request.

この~methodがとる各種 引数には、次の意味と対応する実装~要件がある。 例外の投出を孕むような要件は、下に与える順序で処理され,最初に投出された時点で停止され~MUST(先に与える引数に対する例外は、後に与える引数に対する例外より優先される)。 ◎ The arguments to the method have the following meanings and corresponding implementation requirements. The requirements that involve throwing exceptions must be processed in the order given below, stopping at the first exception thrown. (So the exceptions for the first argument take precedence over the exceptions for the second argument.)

%scheme
~schemeを与える — `mailto^l や `web+auth^l など。 対象になる~URLに対し,その~scheme部位を登録済み~handlerの~listと比較する目的においては、~schemeは`~ASCII大小無視$で比較され~MUST。 ◎ A scheme, such as "mailto" or "web+auth". The scheme must be compared in an ASCII case-insensitive manner by user agents for the purposes of comparing with the scheme part of URLs that they consider against the list of registered handlers.
~colonを包含する%scheme 値( `mailto:^l など)は、何にも合致しない — ~schemeは~colonを包含しないので。 ◎ The scheme value, if it contains a colon (as in "mailto:"), will never match anything, since schemes don't contain colons.

`registerProtocolHandler()$m ~methodの被呼出時には、 %scheme が次のいずれにも該当しない場合,~UAは`SecurityError$E を投出し~MUST:

  • `~safelisted~scheme$である
  • 値の頭部は `web+^l に一致していて,それ以降の部分は[ 空でない, かつ`~ASCII英小文字$のみからなる ]
◎ If the registerProtocolHandler() method is invoked with a scheme that is neither a safelisted scheme nor a scheme whose value starts with the substring "web+" and otherwise contains only ASCII lower alphas, and whose length is at least five characters (including the "web+" prefix), the user agent must throw a "SecurityError" DOMException.

`~safelisted~scheme@ は、次に挙げるものからなる: ◎ The following schemes are the safelisted schemes:

  • `bitcoin^sc
  • `geo^sc
  • `im^sc
  • `irc^sc
  • `ircs^sc
  • `magnet^sc
  • `mailto^sc
  • `mms^sc
  • `news^sc
  • `nntp^sc
  • `openpgp4fpr^sc
  • `sip^sc
  • `sms^sc
  • `smsto^sc
  • `ssh^sc
  • `tel^sc
  • `urn^sc
  • `webcal^sc
  • `wtai^sc
  • `xmpp^sc

注記: この~listは変更され得る。 追加されるべき~schemeがあれば、~feedbackを送られたし。 ◎ This list can be changed. If there are schemes that ought to be added, please send feedback.

注記: ~inlineで~supportされるものと適度に期待できるような~schemeは、この~listから 除外されている — 例えば `iframe$e における, `http^sc や(より理論的には) `gopher^sc など。 それらが~supportされた場合、中間者~攻撃に利用され得る — そのような内容を伴う~frameを有する頁を~protocol~handlerの制御~下にある内容で置換することにより。 更には、~UAが これらの~schemeに対する~native~supportを有する場合、~cookie盗用~攻撃にも利用され得る。 ◎ This list excludes any schemes that could reasonably be expected to be supported inline, e.g. in an iframe, such as http or (more theoretically) gopher. If those were supported, they could potentially be used in man-in-the-middle attacks, by replacing pages that have frames with such content with content under the control of the protocol handler. If the user agent has native support for the schemes, this could further be used for cookie-theft attacks.

%url
要請を取扱うことになる頁の`~URL$を築くために利用される文字列。 ◎ A string used to build the URL of the page that will handle the requests.

まず、 %url 引数に対し,次を走らせた結果を`原型URL$とする:

  1. ~IF[ %url は文字列 `%s^l を包含していない ] ⇒ ~THROW `SyntaxError$E
  2. ~RET %url を`前処理-$した結果(例外~投出あり)

注記: 仮入力 `%s^c が %url の[ ~scheme, ~host, ~port ]いずれかの部位~内にある場合、前処理-時に例外が投出されることになる。

注記: `原型URL$は、~URL内では妥当な成分でない文字列 `%s^l を含むので,定義により`妥当な~URL文字列$ではない。

◎ User agents must throw a "SyntaxError" DOMException if the url argument passed to one of these methods does not contain the exact literal string "%s". ◎ User agents must throw a "SyntaxError" DOMException if parsing the url argument relative to the relevant settings object of this NavigatorContentUtils object is not successful. ◎ The resulting URL string would by definition not be a valid URL string as it would include the string "%s" which is not a valid component in a URL. ◎ User agents must throw a "SecurityError" DOMException if the resulting URL record has an origin that differs from the origin specified by the relevant settings object of this NavigatorContentUtils object. ◎ This is forcibly the case if the %s placeholder is in the scheme, host, or port parts of the URL.
上で得られた `原型URL@ は、下に述べる各種~methodの目的において,~handlerを識別する。 ◎ The resulting URL string is the proto-URL. It identifies the handler for the purposes of the methods described below.

~UAが[ ある内容を指す,予め`絶対~URL$にされた %内容~URL ]に対し,この~handlerを利用するときは、次に従わ~MUST:

  1. %内容~URL 内の~EACH( %文字 ) を次の結果に置換する ⇒ `~UTF-8~percent-符号化する$( `~path~percent-符号化-集合$, %文字 )
  2. %url ~SET `原型URL$ 内で最初に現れる文字列 `%s^l を %内容~URL に置換した結果
  3. %url ~SET %url を[ 此れに`関連する設定群~obj$ ]に`相対的に構文解析-$した結果
  4. 適切な`閲覧文脈$を %url へ`~navigate$する。
◎ When the user agent uses this handler, it must replace the first occurrence of the exact literal string "%s" in the url argument with an escaped version of the absolute URL of the content in question (as defined below), then parse the resulting URL, relative to the relevant settings object of the NavigatorContentUtils object on which the registerProtocolHandler() method was invoked, and then navigate an appropriate browsing context to the resulting URL. ◎ To get the escaped version of the absolute URL of the content in question, the user agent must replace every character in that absolute URL that is not a character in the URL default encode set with the result of UTF-8 percent encoding that character.

利用者が ~site `https://example.com/^c を訪問している間に,次が~callされたとする: ◎ If the user had visited a site at https://example.com/ that made the following call:

navigator.registerProtocolHandler('web+soup', 'soup?url=`%s^_', 'SoupWeb™')

しばらく経ってから `https://www.example.net/^c を訪問している間、次のような~linkを~clickしたとする: ◎ ...and then, much later, while visiting https://www.example.net/, clicked on a link such as:

<a href="web+soup:chickenkïwi.soup">チキンのキーウィスープをダウンロードする</a>

このとき,~UAは、次の~URLへ~navigateするであろう: ◎ ...then the UA might navigate to the following URL:

`https://example.com/soup?url=web+soup:chicken-k%C3%AFwi^l

この~siteは、何であれ `soup^c についての何かを行うこともできる(それを合成した上で,利用者に送るなど)。 ◎ This site could then do whatever it is that it does with soup (synthesize it and ship it to the user, or whatever).

%title (両~methodに共通)
~handlerについての説明的~title — ~UAが、当の~siteが何であるか利用者に思い出してもらうときに利用できるような。 ◎ A descriptive title of the handler, which the UA might use to remind the user what the site in question is.

この節は、この~methodにより登録された頁がどう利用されるかについては、上述した %url 値の処理に課される要件を除き,定義しない。 文書~間を`~navigate$するときの処理~modelは、この~methodに関連する事例を ある程度~定義するが、一般に,[ さもなければ,~native~pluginや~helper~appに内容を手渡すことを考慮することになる所 ]では、~UAは,この情報を利用してよい。 ◎ This section does not define how the pages registered by this method are used, beyond the requirements on how to process the url value (see above). To some extent, the processing model for navigating across documents defines some cases where these methods are relevant, but in general UAs may use this information wherever they would otherwise consider handing content to native plugins or helper applications.


登録~methodに加えて、~handlerを未登録にする~methodもある。 ◎ In addition to the registration method, there is also a method for unregistering handlers.

%window . `navigator$m . `unregisterProtocolHandler(scheme, url)$m
引数に所与の~handlerを未登録にする。 ◎ Unregisters the handler given by the arguments.
`unregisterProtocolHandler(scheme, url)@m

被呼出時には、所与の 2 個の引数で記述される登録済みの~handlerがあれば,それを未登録にし~MUST: ◎ The unregisterProtocolHandler() method must unregister the handler described by the two arguments to the method, where the first argument gives the scheme and the second gives the string used to build the URL of the page that will handle the requests.

  • 引数 %scheme は、[ ~scheme / `~MIME型$ ]を与える。 それは、関連する~handlerを見出すときには,登録済みの~custom[ ~protocol/内容 ]~handlerに対する[ ~scheme/`~MIME型$ ]と`~ASCII大小無視$で比較され~MUST。 ◎ The first argument must be compared to the schemes for which custom protocol handlers are registered in an ASCII case-insensitive manner to find the relevant handlers.
  • 引数 %url は、要請を取扱うことになる頁の`~URL$を築くために利用される文字列を与える。 それは、下に述べるように`前処理-$した上で,それに成功したならば、関連する~handlerを見出すときには,登録済みの`原型URL$と照合され~MUST。 ◎ The second argument must be preprocessed as described below, and if that is successful, must then be matched against the proto-URLs of the relevant handlers to find the described handler.

文字列 %url を `前処理-@ するときは、次を走らせ~MUST: ◎ The second argument must be preprocessed as follows:

  1. ~IF[ %url は文字列 `%s^l を包含していない ] ⇒ ~RET ε (合致する~handlerは無い) ◎ If the string does not contain the substring "%s", abort these steps. There's no matching handler.
  2. %設定群 ~LET 此れに`関連する設定群~obj$ ◎ ↓
  3. ( %~URL~record, %~URL文字列 ) ~LET %url を %設定群 に`相対的に構文解析-$した ( `結果の~URL~record$, `結果の~URL文字列$ ) ◎ Parse the string relative to the relevant settings object of this NavigatorContentUtils object.\
  4. ~IF[ %~URL~record ~EQ ~error ] ⇒ ~THROW `SyntaxError$E ◎ If this fails, then throw a "SyntaxError" DOMException.
  5. ~IF[ ( %~URL~record の`生成元$, %設定群 の`生成元$enV ) は`同一生成元$でない ] ⇒ ~THROW `SecurityError$E ◎ If the resulting URL record's origin is not the same origin as the origin of the relevant settings object of this NavigatorContentUtils object, throw a "SecurityError" DOMException.
  6. ~RET %~URL文字列 ◎ Return the resulting URL string as the result of preprocessing the argument.
8.7.1.3.1. 保安と~privacy

これらの仕組みは、いくつかの懸念 — 特に~privacy上の懸念 — を導入し得る: ◎ These mechanisms can introduce a number of concerns, in particular privacy concerns.

すべての~Web用法の乗取り
~UAは、`~HTTP_S~scheme$など,通常運用の要となる~schemeに対しては、第三者主体~siteに経由し直されることを許容する~SHOULDでない。 これを許容すると、利用者の活動は自明に追跡され,保安的~接続であろうが 利用者~情報は収集されることになる。 ◎ Hijacking all Web usage. User agents should not allow schemes that are key to its normal operation, such as an HTTP(S) scheme, to be rerouted through third-party sites. This would allow a user's activities to be trivially tracked, and would allow user information, even in secure connections, to be collected.
既定に対する乗取り
~UAには、どの既定も自動的に変更しないことが強く督促される — そうすると,利用者が期待していない~remote~hostへ~dataが送信されかねないので。 自身を登録している新たな~handlerに,自動的にその種の~siteを利用させることは、決して生じる~SHOULDでない。 ◎ Hijacking defaults. User agents are strongly urged to not automatically change any defaults, as this could lead the user to send data to remote hosts that the user is not expecting. New handlers registering themselves should never automatically cause those sites to be used.
~spam的な登録
~UAは、ある~siteが多数の~handlerを登録しようと試みる可能性を考慮する~SHOULDである。 複数の~domainから行われる場合もある(例えば、異なる~domain上にある 一連の頁を通して~redirectして、複数の `web+mpeg^mt 用の~handlerを登録するなど — 他の~web~browser特色機能を濫用するような,相似する実施は、~pornography~Web~siteにより何年も利用されている)。 ~UAは、そのような敵対的な試みを上品に取扱って,利用者を保護する~SHOULDである。 ◎ Registration spamming. User agents should consider the possibility that a site will attempt to register a large number of handlers, possibly from multiple domains (e.g., by redirecting through a series of pages each on a different domain, and each registering a handler for web+spam: — analogous practices abusing other web browser features have been used by pornography Web sites for many years). User agents should gracefully handle such hostile attempts, protecting the user.
誤誘導する~title
~UAは、登録済み~handlerを利用者に提示するときに,~methodに対する %title 引数ばかりに依拠する~SHOULDでない — ~siteは容易に詐称できるので。 例えば,ある敵対的~site `hostile.example.net^c は、 “XYZ 公認の内容~handler” を登録しましたと主張することもできる。 したがって,~UAは、~titleに加えて~handlerの生成元も~UI内に伴わせる~SHOULDである。 ◎ Misleading titles. User agents should not rely wholly on the title argument to the methods when presenting the registered handlers to the user, since sites could easily lie. For example, a site hostile.example.net could claim that it was registering the "Cuddly Bear Happy Scheme Handler". User agents should therefore use the handler's origin in any UI along with any title.
敵対的~handler~metadata
~UAは、自身の~UI内に埋込まれる文字列を用いるような代表的な攻撃に抗して,保護する~SHOULDである — 例えば、そのような文字列~内の~markupや文字~escapeは 実行されず, ~NULL ~byteは 適正に取扱われ, 長過ぎる文字列により~crash-or-buffer-overrunは 生じないこと, 等々を確保するなど。 ◎ Hostile handler metadata. User agents should protect against typical attacks against strings embedded in their interface, for example ensuring that markup or escape characters in such strings are not executed, that null bytes are properly handled, that over-long strings do not cause crashes or buffer overruns, and so forth.
~Intranet~URLの漏洩

この節に述べた仕組みは、次のような~~経過をたどることで,~Intranet内の秘匿~URLを漏洩させ得る: ◎ Leaking Intranet URLs. The mechanism described in this section can result in secret Intranet URLs being leaked, in the following manner:

  1. 利用者は、第三者主体による~scheme~handlerを,ある~scheme用の既定の~handlerとして登録する。 ◎ The user registers a third-party scheme handler as the default handler for a scheme.
  2. 後に,利用者は、ある~Intranet~siteを閲覧して,前項の~schemeを利用する~URLに~accessする。 ◎ The user then browses their corporate Intranet site and accesses a URL that uses that scheme.
  3. ~UAは、~Intranet上の内容を指す~URLを,第三者主体に~~接触して手渡す。 ◎ The user agent contacts the third party and hands the third party the URL to the Intranet content.

この方式では,実際に機密的な~file~dataは漏洩されないが、~URL自体が機密的~情報を包含することもある。 例えば, `https://www.corp.example.com/upcoming-aquisitions/the-sample-company.egf^l のような~URLは、[ “corp.example” 法人は “sample-company” 社と合併しようと意図している ]ことを,第三者主体に伝えるかもしれない。 実装者は、[ ある種の[ 下位domain / 内容~型 / ~scheme ]に対しては、この特色機能を ~Intranetの管理者が不能化できる ]ようにしたいと考えるかもしれない。 ◎ No actual confidential file data is leaked in this manner, but the URLs themselves could contain confidential information. For example, the URL could be https://www.corp.example.com/upcoming-aquisitions/the-sample-company.egf, which might tell the third party that Example Corporation is intending to merge with The Sample Company. Implementers might wish to consider allowing administrators to disable this feature for certain subdomains, content types, or schemes.

資格証の漏洩
~UAは、決して,[ ~URL内に~escapeして含められた~usernameや~password情報 ]が~handler~siteへ送信されるようにして~MUST_NOT。 ~UAは、~accessに認証を要求することが既知である資源の~URLに対しては,~Webに基づく~handlerに渡そうと試みることさえ避けてよい — そのような~siteは、利用者に資格証を~~入力してもらうよう自身を~promptすることなしには,当の資源に~accessできないので(それは、[ 利用者が第三者主体の~handlerを信用するかどうかを知ること / 多くの利用者が下せないか理解できない決断 ]を要求するような実施である)。 ◎ Leaking credentials. User agents must never send username or password information in the URLs that are escaped and included sent to the handler sites. User agents may even avoid attempting to pass to Web-based handlers the URLs of resources that are known to require authentication to access, as such sites would be unable to access the resources in question without prompting the user for credentials themselves (a practice that would require the user to know whether to trust the third-party handler, a decision many users are unable to make or even understand).
~UIへの干渉
~UAは、~methodに意図的に長い引数が渡されたときの~~対策もとっておく~SHOULDである。 例えば、公開される~UI内に 2 個の~button[ “受認-”, “否認-” ]があって,~handlerの名前が “受認-” ~buttonに束ねられている場合、長い名前により “否認-” ~buttonが~screen外へ押し出されないようにすることが重要になる。 ◎ Interface interference. User agents should be prepared to handle intentionally long arguments to the methods. For example, if the user interface exposed consists of an "accept" button and a "deny" button, with the "accept" binding containing the name of the handler, it's important that a long name not cause the "deny" button to be pushed off the screen.

8.7.1.4. ~cookie

[Exposed=Window,
`NoInterfaceObject$]
interface `NavigatorCookies@I {
  readonly attribute boolean `cookieEnabled$m;
};
%window . `navigator$m . `cookieEnabled$m
~cookieを設定しても無視されるならば ~F / ~ELSE_ ~T を返す。 ◎ Returns false if setting a cookie will be ignored, and true otherwise.

`cookieEnabled@m 属性は、 取得子は、~UAが[ ~cookie仕様に則って~cookieを取扱うよう試みるならば ~T / ~ELSE_ すなわち~cookie変更-要請を無視するならば ~F ]を返さ~MUST。 `COOKIES$r ◎ The cookieEnabled attribute must return true if the user agent attempts to handle cookies according to the cookie specification, and false if it ignores cookie change requests. [COOKIES]

8.7.1.5. ~plugin

[Exposed=Window,
`NoInterfaceObject$]
interface `NavigatorPlugins@I {
  [`SameObject$] readonly attribute `PluginArray$I `plugins$m;
  [`SameObject$] readonly attribute `MimeTypeArray$I `mimeTypes$m;
  boolean `javaEnabled()$m;
};

[Exposed=Window,
`LegacyUnenumerableNamedProperties$]
interface `PluginArray@I {
  void `refresh$pA(optional boolean reload = false);
  readonly attribute unsigned long `length$pA;
  getter `Plugin$I? `item$pA(unsigned long index);
  getter `Plugin$I? `namedItem$pA(DOMString name);
};

[Exposed=Window,
`LegacyUnenumerableNamedProperties$]
interface `MimeTypeArray@I {
  readonly attribute unsigned long `length$mA;
  getter `MimeType$I? `item$mA(unsigned long index);
  getter `MimeType$I? `namedItem$mA(DOMString name);
};

[Exposed=Window,
`LegacyUnenumerableNamedProperties$]
interface `Plugin@I {
  readonly attribute DOMString `name$m;
  readonly attribute DOMString `~description0$m;
  readonly attribute DOMString `filename$m;
  readonly attribute unsigned long `length$m;
  getter `MimeType$I? `item$m(unsigned long index);
  getter `MimeType$I? `namedItem$m(DOMString name);
};

[Exposed=Window]
interface `MimeType@I {
  readonly attribute DOMString `type$m;
  readonly attribute DOMString `description$m;
  readonly attribute DOMString `suffixes$m; /* 
~comma区切りの
◎
comma-separated
 */
  readonly attribute `Plugin$I `enabledPlugin$m;
};
%window . `navigator$m . `plugins$m . `refresh( [ refresh ] )$pA
当の頁にて~supportされる[ ~pluginの~list, ~MIME型の~list ]を更新した上で、いずれかの~listが変化していた場合には,頁を再読込する。 ◎ Updates the lists of supported plugins and MIME types for this page, and reloads the page if the lists have changed.
%window . `navigator$m . `plugins$m . `length$pA
~UAが報告する[ `Plugin$I ~objで表現される~plugin ]たちの個数を返す。 ◎ Returns the number of plugins, represented by Plugin objects, that the user agent reports.
%plugin = %window . `navigator$m . `plugins$m . `item(index)$pA
%window . `navigator$m . `plugins$m[%index]
指定された `Plugin$I ~objを返す。 ◎ Returns the specified Plugin object.
%plugin = %window . `navigator$m . `plugins$m . `item(name)$pA
%window . `navigator$m . `plugins$m[%name]
所与の名前を有する~pluginに対する `Plugin$I ~objを返す。 ◎ Returns the Plugin object for the plugin with the given name.
%window . `navigator$m . `mimeTypes$m . `length$mA
~UAが報告する[ 各~pluginにより~supportされる `MimeType$I ~objで表現される~MIME型 ]の個数を返す。 ◎ Returns the number of MIME types, represented by MimeType objects, supported by the plugins that the user agent reports.
%mimeType = %window . `navigator$m . `mimeTypes$m . `item(index)$mA
%window . `navigator$m . `mimeTypes$m[%index]
指定された `MimeType$I ~objを返す。 ◎ Returns the specified MimeType object.
%mimeType = %window . `navigator$m . `mimeTypes$m . `item(name)$mA
%window . `navigator$m . `mimeTypes$m[%name]
所与の~MIME型に対する `MimeType$I ~objを返す。 ◎ Returns the MimeType object for the given MIME type.
%plugin . `name$m
この~pluginの名前を返す。 ◎ Returns the plugin's name.
%plugin . `~description0$m
この~pluginの記述を返す。 ◎ Returns the plugin's description.
%plugin . `filename$m
現在の~platformにて適用し得るなら,この~plugin~libraryの~filenameを返す。 ◎ Returns the plugin library's filename, if applicable on the current platform.
%plugin . `length$m
この~pluginが~supportする `MimeType$I ~objたちで表現される~MIME型の個数を返す。 ◎ Returns the number of MIME types, represented by MimeType objects, supported by the plugin.
%mimeType = %plugin . `item(index)$m
%plugin[%index]
指定された `MimeType$I ~objを返す。 ◎ Returns the specified MimeType object.
%mimeType = %plugin . `item(name)$m
%plugin[%name]
所与の~MIME型に対する `MimeType$I ~objを返す。 ◎ Returns the MimeType object for the given MIME type.
%mimeType . `type$m
~MIME型を返す。 ◎ Returns the MIME type.
%mimeType . `description$m
この~MIME型の記述を返す。 ◎ Returns the MIME type's description.
%mimeType . `suffixes$m
この~MIME型の代表的な~file拡張子を ~comma区切りの~listで返す。 ◎ Returns the MIME type's typical file extensions, in a comma-separated list.
%mimeType . `enabledPlugin$m
この~MIME型を実装する `Plugin$I ~objを返す。 ◎ Returns the Plugin object that implements this MIME type.
%window . `navigator$m . `javaEnabled()$m
~MIME型 `application/x-java-vm^l を~supportする~pluginがあるならば ~T を返す。 ◎ Returns true if there's a plugin that supports the MIME type "application/x-java-vm".
`NavigatorPlugins^I ~obj
`plugins@m
取得子は、 `PluginArray$I ~objを返さ~MUST。 ◎ The navigator.plugins attribute must return a PluginArray object.
`mimeTypes@m
取得子は、 `MimeTypeArray$I ~objを返さ~MUST。 ◎ The navigator.mimeTypes attribute must return a MimeTypeArray object.

【 これらの属性は、 [SameObject] が付与されているので,常に同じ~objを返す。 返される `PluginArray$I ~obj, `MimeTypeArray$I ~objは、同じ下層の~pluginたちに基づくことを通して,互いに関連する。 】

`PluginArray^I ~obj

`PluginArray$I ~objは、 `~Pluginたち@ を持つ。 それは,いくつかの[ ~UAが~supportする`~plugin$を表現する `Plugin$I ~obj ]からなるが、[ それらの`~plugin$のうち どれが実際に`~Pluginたち$に含められるか ]は,~UAの裁量に委ねられる。 加えて、これらの各`~plugin$(を表現する `Plugin$I ~obj)は, `隠されて@ もよい。 `隠されて$いる~pluginは、列挙されないが,それでも名前を用いて探れる。 ◎ A PluginArray object represents none, some, or all of the plugins supported by the user agent, each of which is represented by a Plugin object. Each of these Plugin objects may be hidden plugins. A hidden plugin can't be enumerated, but can still be inspected by using its name.

【 “~Pluginたち” は、~UAが~supportするあらゆる`~plugin$との区別を簡潔に表すため,この訳に導入した用語である。 】【 `~Pluginたち$のうち,`隠されて$いないものは、 “隠されてない~Pluginたち” とも表記される。 】

注記: `PluginArray$I ~objで表現される`~plugin$たちが[ より少ない / より多く`隠されて$いる ]ほど、利用者の~privacyは保護されることになる。 より多くの~pluginが公開されるほど、指紋収集~用に導出される~bit数は増える。 ~pluginを隠すことは助けになるが,それでも、ごく稀な~pluginでない限り,~siteは、~pluginの~support有無を名前で探ることにより,~pluginの~listを決定できる可能性は高い(普及した~pluginの名前は周知なので)。 したがって~pluginをまったく公開しないことが選好される。 あいにく,多くの旧来の~siteは、この特色機能を利用して,例えば 動画の再生にどの~pluginを利用するかを決定している。 したがって,~pluginをまったく公開しないことは、必ずしも満足いくものにはならないかもしれない。 ◎ The fewer plugins are represented by the PluginArray object, and of those, the more that are hidden, the more the user's privacy will be protected. Each exposed plugin increases the number of bits that can be derived for fingerprinting. Hiding a plugin helps, but unless it is an extremely rare plugin, it is likely that a site attempting to derive the list of plugins can still determine whether the plugin is supported or not by probing for it by name (the names of popular plugins are widely known). Therefore not exposing a plugin at all is preferred. Unfortunately, many legacy sites use this feature to determine, for example, which plugin to use to play video. Not exposing any plugins at all might therefore not be entirely plausible.

~UAが作成した `PluginArray$I ~objは`~live$であっては~MUST_NOT — すなわち,その`~Pluginたち$は、 `refresh()$pA ~methodで更新される前後を除き,~objの作成-後に変化しては~MUST_NOT。 ◎ The PluginArray objects created by a user agent must not be live. The set of plugins represented by the objects must not change once an object is created, except when it is updated by the refresh() method.

`~Pluginたち$内の各 `Plugin$I が表現する`~plugin$は、何個かの`~MIME型$を~supportし得る。 そのような各`~plugin$に対しては、~UAは, 1 個~以上の`~MIME型$を `明示的に~support@ するものとして選ば~MUST。 ◎ Each plugin represented by a PluginArray can support a number of MIME types. For each such plugin, the user agent must pick one or more of these MIME types to be those that are explicitly supported.

注記: `~plugin$にて`明示的に~support$される`~MIME型$は、 `Plugin$I / `MimeTypeArray$I ~interfaceを通して公開される。 `~plugin$自体と同様に,何が公開されるかが 利用者ごとに様々になる場合、~siteによる指紋収集が可能になる。 したがって,~UAは、すべての`~plugin$利用者に対し — それが~supportする実際の型にかかわらず — 同じ`~MIME型$を公開することが奨励される — 少なくとも,旧来の内容との互換性により課される拘束の中で。 ◎ The explicitly supported MIME types of a plugin are those that are exposed through the Plugin and MimeTypeArray interfaces. As with plugins themselves, any variation between users regarding what is exposed allows sites to fingerprint users. User agents are therefore encouraged to expose the same MIME types for all users of a plugin, regardless of the actual types supported... at least, within the constraints imposed by compatibility with legacy content.

`PluginArray$I ~objの`被support~prop~index$は、 0 以上[ ~objの`隠されてない~Pluginたち$の個数 ]未満とする。 ~FINGERPRINTING ◎ The supported property indices of a PluginArray object are the numbers from zero to the number of non-hidden plugins represented by the object, if any. (This is a fingerprinting vector.)

`length@pA
取得子は、此れの`隠されてない~Pluginたち$の個数を返さ~MUST。 ~FINGERPRINTING ◎ The length attribute must return the number of non-hidden plugins represented by the object. (This is a fingerprinting vector.)
`item(index)@pA

被呼出時には、次の手続きを走らせた結果を返さ~MUST: ◎ The item() method of a PluginArray object must\

  1. ~IF[ %index ~NIN { 此れの`被support~prop~index$ } ] ⇒ ~RET ~NULL ◎ return null if the argument is not one of the object's supported property indices, and otherwise must return the result of running the following steps, using the method's argument as index:
  2. ~RET [ 此れの`隠されてない~Pluginたち$を,それぞれの `name$m の字句順に~sortした結果の~list ]内の %index 番の~entry ◎ Let list be the Plugin objects representing the non-hidden plugins represented by the PluginArray object. ◎ Sort list alphabetically by the name of each Plugin. ◎ Return the indexth entry in list.

注記: ~pluginの順序 — 例えば~pluginが~installされた順序など — が追加の情報を漏洩しないことは、`~privacyに重要$である。 ◎ It is important for privacy that the order of plugins not leak additional information, e.g. the order in which plugins were installed.

`PluginArray$I ~objの`被support~prop名$は、その`~Pluginたち$それぞれの `name$m 属性の値からなる。 ~FINGERPRINTING ◎ The supported property names of a PluginArray object are the values of the name attributes of all the Plugin objects represented by the PluginArray object. (This is a fingerprinting vector.)

`namedItem(name)@pA
被呼出時には、[ %name ~NIN { 此れの`被support~prop名$ } ならば ~NULL / ~ELSE_ 此れの`~Pluginたち$内の[ `name$m ~EQ %name ]なる `Plugin$I ~obj ]を返さ~MUST。 ◎ The namedItem() method of a PluginArray object must return null if the argument is not one of the object's supported property names, and otherwise must return the Plugin object, of those represented by the PluginArray object, that has a name equal to the method's argument.
【 すなわち、`~Pluginたち$と, それらが表現する~pluginの名前の集合は、一対一に対応する(ことが暗黙的に規定されていると見受けられる)。 】
`refresh(reload)@pA

被呼出時には、次に従って動作し~MUST: ◎ The refresh() method of the PluginArray object of a Navigator object, when invoked, must\

  1. ~IF[ ~UAが此れを作成した後に、ある`~plugin$が[ ~installされた, または 環境設定し直された ]]~AND[ %reload ~EQ ~T ]:

    1. `location.reload()$m ~methodが~callされたかのように動作する
    2. ~RET
    ◎ check to see if any plugins have been installed or reconfigured since the user agent created the PluginArray object. If so, and the method's argument is true, then the user agent must act as if the location.reload() method was called instead.\
  2. [ `plugins$m, `mimeTypes$m ]属性~用に作成された,[ 此れの`~Pluginたち$ / 此れに関連する `MimeTypeArray$I ~objの`~MimeTypeたち$ ]を、次に従って更新する: ◎ Otherwise, the user agent must update the PluginArray object and MimeTypeArray object created for attributes of that Navigator object, and the Plugin and MimeType objects created for those PluginArray and MimeTypeArray objects, using\

    • `Plugin$I ~objのうち,更新-前後で `name$m が同じになるものは、そのまま残す ◎ the same Plugin objects for cases where the name is the same, and\
    • `MimeType$I ~objのうち,更新-前後で `type$m が同じになるものは、そのまま残す ◎ the same MimeType objects for cases where the type is the same, and\
    • 更新-前(すなわち,この~methodが~callされる直前)には合致する~objがなかった[ ~plugin名/~MIME型 ]に対しては、新たな~objを作成する。 ◎ creating new objects for cases where there were no matching objects immediately prior to the refresh() call.\
    • 更新-前からそのまま残された,各[ `Plugin$I / `MimeType$I ]~objの各種 属性は、更新-前の時点と同じ値を返し続け~MUST — 更新-前と後の~dataは,整合しなくなるかもしれないが(例えば,そのような `MimeType$I ~obj %T の `enabledPlugin$m が返す `Plugin$I ~objが更新-後に~supportする~MIME型たちには、最早 %T が表現する~MIME型は含まれていないかもしれない)。 ◎ Old Plugin and MimeType objects must continue to return the same values that they had prior to the update, though naturally now the data is stale and may appear inconsistent (for example, an old MimeType entry might list as its enabledPlugin a Plugin object that no longer lists that MimeType as a supported MimeType).
`MimeTypeArray^I ~obj

`MimeTypeArray$I ~objは、~UAが~supportする`~plugin$により`明示的に~support$される`~MIME型$を表現する — そのそれぞれは、 `MimeType$I ~objにより表現される。 ◎ A MimeTypeArray object represents the MIME types explicitly supported by plugins supported by the user agent, each of which is represented by a MimeType object.

~UAが作成した `MimeTypeArray$I ~objは`~live$であっては~MUST_NOT。 この~objが表現する~MIME型の集合は、 `refresh()$pA ~methodで更新される前後を除き,~objの作成-後に変化しては~MUST_NOT。 ◎ The MimeTypeArray objects created by a user agent must not be live. The set of MIME types represented by the objects must not change once an object is created, except when it is updated by the PluginArray object's refresh() method.

`MimeTypeArray$I ~objの[ `~MimeTypeたち@ / `隠されてない~MimeTypeたち@ ]は、[[ 関連する `PluginArray$I ~objの[ `~Pluginたち$ / `隠されてない~Pluginたち$ ]により`明示的に~support$される`~MIME型$ ]を表現している `MimeType$I ~objたちからなるとする。 【これらは、以下を簡潔に記すために,この訳に導入した定義である。】

`MimeTypeArray$I ~objの`被support~prop~index$は、 0 以上[ その`隠されてない~MimeTypeたち$の個数 ]未満とする。 ~FINGERPRINTING ◎ The supported property indices of a MimeTypeArray object are the numbers from zero to the number of MIME types explicitly supported by non-hidden plugins represented by the corresponding PluginArray object, if any. (This is a fingerprinting vector.)

`length@mA
取得子は、此れの`隠されてない~MimeTypeたち$の個数を返さ~MUST。 ~FINGERPRINTING ◎ The length attribute must return the number of MIME types explicitly supported by non-hidden plugins represented by the corresponding PluginArray object, if any. (This is a fingerprinting vector.)
`item(index)@mA

被呼出時には、次の手続きを走らせた結果を返さ~MUST: ◎ The item() method of a MimeTypeArray object must return null if the argument is not one of the object's supported property indices, and otherwise must return the result of running the following steps, using the method's argument as index:

  1. ~IF[ %index ~NIN { 此れの`被support~prop~index$ } ] ⇒ ~RET ~NULL ◎ ↑
  2. ~RET [ 此れの`隠されてない~MimeTypeたち$を,それぞれの `type$m 値による字句順に~sortした結果の~list ]の %index 番の~entry ◎ Let list be the MimeType objects representing the MIME types explicitly supported by non-hidden plugins represented by the corresponding PluginArray object, if any. ◎ Sort list alphabetically by the type of each MimeType. ◎ Return the indexth entry in list.

注記: ~MIME型の順序 — 例えば~pluginが~installされた順序など — が追加の情報を漏洩しないことは、`~privacyに重要$である。 ◎ It is important for privacy that the order of MIME types not leak additional information, e.g. the order in which plugins were installed.

`MimeTypeArray$I ~objの`被support~prop名$は、その`~MimeTypeたち$の `type$m 属性の値からなる。 ~FINGERPRINTING ◎ The supported property names of a MimeTypeArray object are the values of the type attributes of all the MimeType objects represented by the MimeTypeArray object. (This is a fingerprinting vector.)

`namedItem(name)@mA
被呼出時には、[ %name ~NIN { 此れの`被support~prop名$ } ならば ~NULL / ~ELSE_ 此れの`~MimeTypeたち$内の[ `type$m ~EQ %name ]なる `MimeType$I ~obj ]を返さ~MUST。 ◎ The namedItem() method of a MimeTypeArray object must return null if the argument is not one of the object's supported property names, and otherwise must return the MimeType object that has a type equal to the method's argument.
【 すなわち、`~MimeTypeたち$と, それらが表現する~MIME型の集合は、一対一に対応する(ことが暗黙的に規定されていると見受けられる)。 】
`Plugin^I ~obj

`Plugin$I ~objは、`~plugin$を表現する。 それは、いくつかの属性により,その~pluginについての詳細を提供し、 `明示的に~support$する`~MIME型$の~listを得るために列挙できる。 ◎ A Plugin object represents a plugin. It has several attributes to provide details about the plugin, and can be enumerated to obtain the list of MIME types that it explicitly supports.

~UAにより作成される `Plugin$I ~objは、`~live$であっては~MUST_NOT。 この~objが表現する~MIME型の集合は、 `refresh()$pA ~methodで更新される前後を除き,~objの作成-後に変化しては~MUST_NOT。 ◎ The Plugin objects created by a user agent must not be live. The set of MIME types represented by the objects, and the values of the objects' attributes, must not change once an object is created, except when updated by the PluginArray object's refresh() method.

`Plugin$I ~objにより `報告される~MIME型たち@ は、この~objが最も近過去に[ 作成された, または `refresh()$pA ~methodにより更新された ]時点で,~objが表現している`~plugin$により`明示的に~support$される`~MIME型$たちである。 ◎ The reported MIME types for a Plugin object are the MIME types explicitly supported by the corresponding plugin when this object was last created or updated by PluginArray.refresh(), whichever happened most recently.

`Plugin$I ~objの `~MimeTypeたち@pI は、[ ~objにより`報告される~MIME型たち$を表現している `MimeType$I ~objたち ]からなるとする。 【これは、以下を簡潔に記すために,この訳に導入した定義である。】

`Plugin$I ~objの`被support~prop~index$は、 0 以上[ その`~MimeTypeたち$pIの個数 ]未満とする。 【原文は “未満” の記述が抜けていると思われる。】 ~FINGERPRINTING ◎ The supported property indices of a Plugin object are the numbers from zero to the number of reported MIME types. (This is a fingerprinting vector.)

`length@m
取得子は、此れの`~MimeTypeたち$pIの個数を返さ~MUST。 ~FINGERPRINTING ◎ The length attribute must return the number of reported MIME types. (This is a fingerprinting vector.)
`item(index)@m

被呼出時には、次の手続きを走らせた結果を返さ~MUST: ◎ The item() method of a Plugin object must\

  1. ~IF[ %index ~NIN { 此れの`被support~prop~index$ } ] ⇒ ~RET ~NULL ◎ return null if the argument is not one of the object's supported property indices, and otherwise must return the result of running the following steps, using the method's argument as index:
  2. ~RET [ 此れの`~MimeTypeたち$pIを,それぞれの `type$m 値による字句順に~sortした結果の~list ]の %index 番の~entry ◎ Let list be the MimeType objects representing the reported MIME types. ◎ Sort list alphabetically by the type of each MimeType. ◎ Return the indexth entry in list.

注記: ~MIME型の順序 — 例えば~pluginが~installされた順序など — が追加の情報を漏洩しないことは、`~privacyに重要$である。 ◎ It is important for privacy that the order of MIME types not leak additional information, e.g. the order in which plugins were installed.

`Plugin$I ~objの`被support~prop名$は、その`~MimeTypeたち$pIの `type$m 属性の値からなる。 ~FINGERPRINTING ◎ The supported property names of a Plugin object are the values of the type attributes of the MimeType objects representing the reported MIME types. (This is a fingerprinting vector.)

`namedItem(name)@m
被呼出時には、[ %name ~NIN { 此れの`被support~prop名$ } ならば ~NULL / ~ELSE_ `MimeType$I ~objのうち[ `type$m ~EQ %name ]なるもの ]を返さ~MUST。 ◎ The namedItem() method of a Plugin object must return null if the argument is not one of the object's supported property names, and otherwise must return the MimeType object that has a type equal to the method's argument.
`name@m
取得子は、`~plugin$の名前を返さ~MUST。 ◎ The name attribute must return the plugin's name.
`~description0@m
`filename@m
取得子は、~UAにより定義される(または,`~plugin$により ほぼ~~確実に定義される)文字列を返さ~MUST。 `refresh()$pA ~methodにより更新される前後を除き、毎回 同じ文字列が返され~MUST。 ◎ The description and filename attributes must return user-agent-defined (or, in all likelihood, plugin-defined) strings. In each case, the same string must be returned each time, except that the strings returned may change when the PluginArray.refresh() method updates the object.
これらの属性から返される値が`~plugin$の~version間で変わる場合、それらは指紋収集路にも,より重要な点として, `~plugin$(したがって~browser)が有し得る保安~上の脆弱性を決定する自明な仕方にも利用され得る。 したがって[ `~description0$m 属性は 単に `name$m 属性と同じ値 / `filename$m 属性は空~文字列 ]を返すことが~~強く推奨される。 ~FINGERPRINTING ◎ If the values returned by the description or filename attributes vary between versions of a plugin, they can be used both as a fingerprinting vector and, even more importantly, as a trivial way to determine what security vulnerabilities a plugin (and thus a browser) may have. It is thus highly recommended that the description attribute just return the same value as the name attribute, and that the filename attribute return the empty string. (This is a fingerprinting vector.)
`MimeType^I ~obj

`MimeType$I ~objは、`~plugin$により`明示的に~support$されている/されていた `~MIME型$を表現する。 ◎ A MimeType object represents a MIME type that is, or was, explicitly supported by a plugin.

~UAが作成した `MimeType$I ~objは`~live$であっては~MUST_NOT。 この~objの属性~値は、 `refresh()$pA ~methodで更新される前後を除き,~objの作成-後に変化しては~MUST_NOT。 ◎ The MimeType objects created by a user agent must not be live. The values of the objects' attributes must not change once an object is created, except when updated by the PluginArray object's refresh() method.

`type@m
取得子は、`~MIME型$を記述している`~parameterを伴わない妥当な~MIME型$を返さ~MUST。 ◎ The type attribute must return the valid MIME type with no parameters describing the MIME type.
`description@m
`suffixes@m
これらの属性の取得子は、~UAにより定義される(または,`~plugin$により ほぼ~~確実に定義される)文字列を返さ~MUST。 `refresh()$pA ~methodにより更新される前後を除き、毎回 同じ文字列が返され~MUST。 ◎ The description and suffixes attributes must return user-agent-defined (or, in all likelihood, plugin-defined) strings. In each case, the same string must be returned each time, except that the strings returned may change when the PluginArray.refresh() method updates the object.
これらの属性から返される値が`~plugin$の~version間で変わる場合、それらは 指紋収集路にも,より重要な点として, `~plugin$(したがって~browser)が有し得る保安~上の脆弱性を決定する自明な仕方にも利用され得る。 したがって[ `description$m 属性は 単に `type$m 属性と同じ値 / `suffixes$m 属性は空~文字列 ]を返すことが~~強く推奨される。 ~FINGERPRINTING ◎ If the values returned by the description or suffixes attributes vary between versions of a plugin, they can be used both as a fingerprinting vector and, even more importantly, as a trivial way to determine what security vulnerabilities a plugin (and thus a browser) may have. It is thus highly recommended that the description attribute just return the same value as the type attribute, and that the suffixes attribute return the empty string. (This is a fingerprinting vector.)
注記: `suffixes$m 属性~内の~commaは、互いの~filename拡張子を分離するものと解釈される — `htm,html^l のように。 ◎ Commas in the suffixes attribute are interpreted as separating subsequent filename extensions, as in "htm,html".
`enabledPlugin@m
取得子は、此れが最も近過去に[ 作成された, または `refresh()$pA により更新された ]時点での,[ `~Pluginたち$のうち,此れが表現する`~MIME型$を`明示的に~support$する`~plugin$を表現するもの ]を返さ~MUST。 ◎ The enabledPlugin attribute must return the Plugin object that represents the plugin that explicitly supported the MIME type that this MimeType object represents when this object was last created or updated by PluginArray.refresh(), whichever happened most recently.
【 複数の~pluginが同じ~MIME型を~supportする場合にどうなるかは、述べられていない。 】
`javaEnabled()^m ~method

`NavigatorPlugins$I の `javaEnabled()@m ~methodの被呼出時には、[ ~UAは[ `~MIME型$ `application/x-java-vm^l を~supportする`~plugin$ ]を~supportするならば ~T / ~ELSE_ ~F ]を返さ~MUST。 ~FINGERPRINTING ◎ The navigator.javaEnabled() method must return true if the user agent supports a plugin that supports the MIME type "application/x-java-vm"; otherwise it must return false. (This is a fingerprinting vector.)