aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/019f1b74-7113-4213-8b66-b63ae63fa603/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/476bde43-fa24-445f-a79e-b3d251bc515a/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa/body2
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604/body4
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112/body1
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/829f5222-d220-4406-90da-835b72b70a97/values21
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/88fa923c-59ee-47bf-b7c8-d1a7a7bdeb33/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54/body11
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/values24
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa/body34
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/values22
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/9ba533b6-61b6-437a-b4b6-be12aae025e5/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227/body2
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc/body2
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/bd5cef03-c389-4fab-8336-30a02ee97261/values18
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/c81c6f54-62b8-471f-92b0-d67c5aa23bc1/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef/body3
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d315d824-bb0d-4a28-941d-88a1aa77ffa0/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff/body2
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/values21
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8/body49
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8/values8
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/f7ecb466-c223-40c7-a44b-6e1f8f5c6df4/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fcebd19c-12b9-43ae-bc54-7cae39396e9f/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fe5d2894-18a6-4864-b7e6-1eba7e300425/values17
-rw-r--r--.be/27c176c2-26be-4a51-bb71-2aff47c5484b/settings0
-rw-r--r--.be/id-cache30
-rw-r--r--.be/version1
-rw-r--r--Makefile3
-rwxr-xr-xchip-data/ati/drm_pciids.awk94
-rw-r--r--chip-data/ati/drm_pciids.json490
-rw-r--r--chip-data/chipNames.json559
-rw-r--r--chip-data/intel/Intel_GMA.csv69
-rw-r--r--chip-data/intel/Intel_GMA.html1638
-rw-r--r--chip-data/intel/Intel_GMA.odsbin0 -> 16069 bytes
-rw-r--r--data/lib/bzpage.js980
-rw-r--r--data/lib/color.js (renamed from lib/color.js)4
-rw-r--r--data/lib/rhbzpage.js960
-rw-r--r--data/lib/skip-bug.js19
-rw-r--r--data/lib/util.js280
-rw-r--r--docs/bzpage.md0
-rw-r--r--docs/rhbzpage.md0
-rw-r--r--jsons/Config_data.json2
-rw-r--r--lib/bzpage.js1087
-rw-r--r--lib/libbugzilla.js383
-rw-r--r--lib/logger.js134
-rw-r--r--lib/main.js190
-rw-r--r--lib/mozillabzpage.js19
-rw-r--r--lib/passwords.js1
-rw-r--r--lib/prompts.js3
-rw-r--r--lib/rhbzpage.js1023
-rw-r--r--lib/util.js189
-rw-r--r--lib/xmlrpc.js1
-rw-r--r--package.json2
-rw-r--r--tests/pagemod-test-helpers.js55
-rw-r--r--tests/test-color.js10
-rw-r--r--tests/test-match-pattern.js11
-rw-r--r--tests/test-pageMod.js141
-rw-r--r--tests/test-util.js44
73 files changed, 6442 insertions, 2514 deletions
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/019f1b74-7113-4213-8b66-b63ae63fa603/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/019f1b74-7113-4213-8b66-b63ae63fa603/values
new file mode 100644
index 0000000..47fef87
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/019f1b74-7113-4213-8b66-b63ae63fa603/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: wontfix
+
+
+summary: maintCCAddr sent to filterByRegexp are array, not string
+
+
+time: Sat, 19 Feb 2011 22:31:21 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/476bde43-fa24-445f-a79e-b3d251bc515a/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/476bde43-fa24-445f-a79e-b3d251bc515a/values
new file mode 100644
index 0000000..979094f
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/476bde43-fa24-445f-a79e-b3d251bc515a/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: Doesn't allow empty comment string in log
+
+
+time: Thu, 17 Feb 2011 18:54:37 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa/body
new file mode 100644
index 0000000..3aa11b7
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa/body
@@ -0,0 +1,2 @@
+CSS priorities are so complicated, that I just cannot afford time
+and fragility incurred.
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa/values
new file mode 100644
index 0000000..396eeab
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Thu, 24 Feb 2011 18:03:14 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604/body
new file mode 100644
index 0000000..4e46d53
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604/body
@@ -0,0 +1,4 @@
+So instead of this.RHColor, this.FedoraColor, this.RawhideColor,
+this.RHITColor variables and using style attribute, I would have
+special styles in the webpages stylesheet, and link to them with
+class.
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604/values
new file mode 100644
index 0000000..6f954fb
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Wed, 16 Feb 2011 23:25:23 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/values
new file mode 100644
index 0000000..1cc21d4
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: wontfix
+
+
+summary: define proper CSS styles instead of using variables and style attribute
+
+
+time: Wed, 16 Feb 2011 23:24:49 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112/body
new file mode 100644
index 0000000..bfa2555
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112/body
@@ -0,0 +1 @@
+doesn't fill anything
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112/values
new file mode 100644
index 0000000..ae7297a
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Wed, 16 Feb 2011 23:20:18 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/values
new file mode 100644
index 0000000..a1e77c0
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: fixed
+
+
+summary: fillIn magic is broken again
+
+
+time: Wed, 16 Feb 2011 23:20:01 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/829f5222-d220-4406-90da-835b72b70a97/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/829f5222-d220-4406-90da-835b72b70a97/values
new file mode 100644
index 0000000..8fe2990
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/829f5222-d220-4406-90da-835b72b70a97/values
@@ -0,0 +1,21 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+extra_strings:
+- BLOCKS:99abb100-a0e8-49b0-8799-a47e4d5fb0b3
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: open
+
+
+summary: make it work on BMO and BGO again
+
+
+time: Thu, 17 Feb 2011 17:09:22 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/88fa923c-59ee-47bf-b7c8-d1a7a7bdeb33/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/88fa923c-59ee-47bf-b7c8-d1a7a7bdeb33/values
new file mode 100644
index 0000000..bd41f28
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/88fa923c-59ee-47bf-b7c8-d1a7a7bdeb33/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: Hide "Fill in" button when it is not meaningful
+
+
+time: Wed, 16 Feb 2011 23:58:26 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54/body
new file mode 100644
index 0000000..f342a5a
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54/body
@@ -0,0 +1,11 @@
+[16:58:10] mcepl: another question: is there some example
+somewhere of unit test testing pageMods. Meaning, my script works
+on bugzilla and tests I do is to: run firefox, login to
+bugzilla.redhat.com, open some random bug (or some particular one
+if it is some specific thing I want to test), and look for
+exceptions. How to make this automatic?
+[17:01:59] dietrich: mcepl: packages/addon-kit/tests/test-pagemod.js
+[17:02:04] dietrich: (or something near that)
+[17:02:16] dietrich: not sure if does what you want, but should have examples
+[17:02:21] mcepl: will take a look
+[17:03:07] * mcepl makes note to switch to proper pageMods
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54/values
new file mode 100644
index 0000000..6ebae43
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Wed, 16 Feb 2011 23:22:03 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/values
new file mode 100644
index 0000000..b7fa8ba
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/values
@@ -0,0 +1,24 @@
+assigned: Matěj Cepl <mcepl@redhat.com>
+
+
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+extra_strings:
+- BLOCKS:d4145155-0ef1-409e-9236-261eb08f75d5
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: open
+
+
+summary: switch to pageMods
+
+
+time: Wed, 16 Feb 2011 23:20:39 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa/body
new file mode 100644
index 0000000..392378f
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa/body
@@ -0,0 +1,34 @@
+Skript:
+file:///home/matej/projekty/jetpack-sdk/packages/jetpack-core/lib/securable-module.js
+ ->
+resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-bugzilla-triage-lib/bzpage.js:700
+
+ but I am not sure how reliable it is ... there doesn't seem to
+be anything crazy going on there.
+
+This is somewhere around the line 700 in that time.
+
+BZPage.prototype.selectOptionByLabel = function selectOptionByLabel(id, label, fireEvent) {
+ if (!fireEvent) {
+ fireEvent = true;
+ }
+ var sel = this.doc.getElementById(id);
+ var labelRE = new RegExp(label.trim());
+ var ourOption = Array.filter(sel.options, function (op) {
+ return op.textContent.trim() === label;
+ }, this);
+
+ if (ourOption[0]) {
+ sel.value = ourOption[0].value;
+ }
+
+ if (fireEvent) {
+ var intEvent = this.doc.createEvent("HTMLEvents");
+ intEvent.initEvent("change", true, true);
+ sel.dispatchEvent(intEvent);
+ }
+ };
+
+Please enter your comment above
+
+> with some bugs (many) scripts seems to be freezing (running endlessly) on bugzilla.mozilla.org
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa/values
new file mode 100644
index 0000000..4ca0acb
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Wed, 16 Feb 2011 23:27:05 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/values
new file mode 100644
index 0000000..cc186bb
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/values
@@ -0,0 +1,22 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+extra_strings:
+- BLOCKED-BY:829f5222-d220-4406-90da-835b72b70a97
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: open
+
+
+summary: with some bugs (many) scripts seems to be freezing (running endlessly) on
+ bugzilla.mozilla.org
+
+
+time: Wed, 16 Feb 2011 23:25:53 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/9ba533b6-61b6-437a-b4b6-be12aae025e5/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/9ba533b6-61b6-437a-b4b6-be12aae025e5/values
new file mode 100644
index 0000000..cbf5191
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/9ba533b6-61b6-437a-b4b6-be12aae025e5/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: fixed
+
+
+summary: queryLocal doesn't
+
+
+time: Thu, 17 Feb 2011 17:08:36 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227/body
new file mode 100644
index 0000000..1152ebe
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227/body
@@ -0,0 +1,2 @@
+Actually we don't have nouveau data, so we just show Chipset
+line.
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227/values
new file mode 100644
index 0000000..dbc994a
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Thu, 24 Feb 2011 22:49:00 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc/body
new file mode 100644
index 0000000..27f13ae
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc/body
@@ -0,0 +1,2 @@
+I have updated ATI data, but there are actually no nouveau data
+included.
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc/values
new file mode 100644
index 0000000..c588275
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Thu, 24 Feb 2011 18:03:53 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/values
new file mode 100644
index 0000000..951108f
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: Update nouveau data
+
+
+time: Tue, 22 Feb 2011 11:35:44 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/bd5cef03-c389-4fab-8336-30a02ee97261/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/bd5cef03-c389-4fab-8336-30a02ee97261/values
new file mode 100644
index 0000000..457d5a8
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/bd5cef03-c389-4fab-8336-30a02ee97261/values
@@ -0,0 +1,18 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: protect against running fillIn magic when it has been already done and [something]
+ is included
+
+
+time: Tue, 22 Feb 2011 11:35:35 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/c81c6f54-62b8-471f-92b0-d67c5aa23bc1/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/c81c6f54-62b8-471f-92b0-d67c5aa23bc1/values
new file mode 100644
index 0000000..db43897
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/c81c6f54-62b8-471f-92b0-d67c5aa23bc1/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: Generate time sheet!
+
+
+time: Tue, 01 Mar 2011 21:53:13 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef/body
new file mode 100644
index 0000000..94b881c
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef/body
@@ -0,0 +1,3 @@
+repo is
+ http://hg.mozilla.org/users/ehsan.akhgari_gmail.com/extensions/summary
+ blog http://ehsanakhgari.org/
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef/values
new file mode 100644
index 0000000..1e9d89f
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Wed, 16 Feb 2011 23:17:40 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/values
new file mode 100644
index 0000000..e58c618
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: open
+
+
+summary: try to merge bugzillatweaks
+
+
+time: Wed, 16 Feb 2011 23:14:32 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d315d824-bb0d-4a28-941d-88a1aa77ffa0/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d315d824-bb0d-4a28-941d-88a1aa77ffa0/values
new file mode 100644
index 0000000..6571631
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d315d824-bb0d-4a28-941d-88a1aa77ffa0/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: fillIn button needs to click on (edit) link as well
+
+
+time: Mon, 21 Feb 2011 17:56:18 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff/body
new file mode 100644
index 0000000..bfb88f7
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff/body
@@ -0,0 +1,2 @@
+ Mess we have (which needs to be regenerated) is at
+http://gitorious.org/addon-sdk/bugzilla-triage-scripts/commits/api-documentation
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff/values
new file mode 100644
index 0000000..d544520
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Wed, 16 Feb 2011 23:19:36 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/values
new file mode 100644
index 0000000..a2fc3c6
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/values
@@ -0,0 +1,21 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+extra_strings:
+- BLOCKED-BY:989f85c8-3941-4a97-a447-bdbf0fbbd7f4
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: wishlist
+
+
+status: open
+
+
+summary: API documentation is incomplete
+
+
+time: Wed, 16 Feb 2011 23:18:28 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8/body b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8/body
new file mode 100644
index 0000000..32b4893
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8/body
@@ -0,0 +1,49 @@
+info: messageHandler: msg = ({cmd:"MakeXMLRPCall",
+data:{url:{url:"https://bugzilla.redhat.com/xmlrpc.cgi"},
+login:"mcepl@redhat.com", method:"bugzilla.updateAttachMimeType",
+params:[{attach_id:"479099", mime_type:"text/plain",
+nomail:true}], callRPC:"FixAttachmentMIMECallback"}})
+error: An exception occurred.
+Traceback (most recent call last):
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-api-utils-lib/timer.js",
+line 64, in notifyOnTimeout
+ this._callback.apply(null, this._params);
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-api-utils-lib/content/worker.js",
+line 64, in emitter
+ emit.apply(scope, params);
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-api-utils-lib/events.js",
+line 129, in _emit
+ return this._emitOnObject.apply(this, args);
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-api-utils-lib/events.js",
+line 159, in _emitOnObject
+ listener.apply(targetObj, params);
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-bugzilla-triage-lib/main.js",
+line 134, in
+ messageHandler(worker, msg);
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-bugzilla-triage-lib/main.js",
+line 92, in messageHandler
+ msg.data.params, function(ret) {
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-bugzilla-triage-lib/libbugzilla.js",
+line 260, in makeXMLRPCCall
+ var urlObj = urlMod.URL(url);
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-api-utils-lib/api-utils.js",
+line 69, in PublicCtor
+ privateCtor.apply(obj, arguments);
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-api-utils-lib/url.js",
+line 97, in URL
+ var uri = newURI(url, base);
+ File
+"resource://jid0-uxmbewgoltuuuqrhkhrr7hw3iqy-api-utils-lib/url.js",
+line 51, in newURI
+ throw new Error("malformed URI: " + uriStr);
+Error: malformed URI: [object Object]
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8/values
new file mode 100644
index 0000000..e239bfd
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8/values
@@ -0,0 +1,8 @@
+Author: Matěj Cepl <mcepl@redhat.com>
+
+
+Content-type: text/plain
+
+
+Date: Thu, 17 Feb 2011 15:14:51 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/values
new file mode 100644
index 0000000..627b9d6
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: fixed
+
+
+summary: XMLRPC call doesn't
+
+
+time: Thu, 17 Feb 2011 15:14:19 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/f7ecb466-c223-40c7-a44b-6e1f8f5c6df4/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/f7ecb466-c223-40c7-a44b-6e1f8f5c6df4/values
new file mode 100644
index 0000000..a4fb142
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/f7ecb466-c223-40c7-a44b-6e1f8f5c6df4/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: create data/lib and data/test directories and populate them
+
+
+time: Tue, 22 Feb 2011 08:20:32 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fcebd19c-12b9-43ae-bc54-7cae39396e9f/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fcebd19c-12b9-43ae-bc54-7cae39396e9f/values
new file mode 100644
index 0000000..4ebfd98
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fcebd19c-12b9-43ae-bc54-7cae39396e9f/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: product in queries should be from the form, not additional query table
+
+
+time: Fri, 18 Feb 2011 09:44:19 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fe5d2894-18a6-4864-b7e6-1eba7e300425/values b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fe5d2894-18a6-4864-b7e6-1eba7e300425/values
new file mode 100644
index 0000000..3843507
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fe5d2894-18a6-4864-b7e6-1eba7e300425/values
@@ -0,0 +1,17 @@
+creator: Matěj Cepl <mcepl@redhat.com>
+
+
+reporter: Matěj Cepl <mcepl@redhat.com>
+
+
+severity: minor
+
+
+status: closed
+
+
+summary: storing log messages does not work.
+
+
+time: Thu, 24 Feb 2011 23:03:41 +0000
+
diff --git a/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/settings b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/settings
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.be/27c176c2-26be-4a51-bb71-2aff47c5484b/settings
diff --git a/.be/id-cache b/.be/id-cache
new file mode 100644
index 0000000..0d9443b
--- /dev/null
+++ b/.be/id-cache
@@ -0,0 +1,30 @@
+829f5222-d220-4406-90da-835b72b70a97 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/829f5222-d220-4406-90da-835b72b70a97
+a9d5d16d-1c7d-4918-8be2-bd499a799b54 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4/comments/a9d5d16d-1c7d-4918-8be2-bd499a799b54
+ba22934d-f4f1-42ce-95f5-c56394a83ccc .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/ba22934d-f4f1-42ce-95f5-c56394a83ccc
+ecff7ddb-1d5f-406b-9b3b-18388d575604 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/ecff7ddb-1d5f-406b-9b3b-18388d575604
+d4145155-0ef1-409e-9236-261eb08f75d5 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5
+c81c6f54-62b8-471f-92b0-d67c5aa23bc1 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/c81c6f54-62b8-471f-92b0-d67c5aa23bc1
+12d5c683-231b-4b4f-8f05-b6ae32a5b0a8 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa/comments/12d5c683-231b-4b4f-8f05-b6ae32a5b0a8
+476bde43-fa24-445f-a79e-b3d251bc515a .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/476bde43-fa24-445f-a79e-b3d251bc515a
+29f5f313-559a-4fea-88fa-fc4a4fc94112 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba/comments/29f5f313-559a-4fea-88fa-fc4a4fc94112
+11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4/comments/11c4a6bb-a7a5-4d18-bab5-14ab119bb3ef
+5fc172f0-231a-4d0e-9c6b-8d9f60abbfba .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5fc172f0-231a-4d0e-9c6b-8d9f60abbfba
+d315d824-bb0d-4a28-941d-88a1aa77ffa0 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d315d824-bb0d-4a28-941d-88a1aa77ffa0
+88fa923c-59ee-47bf-b7c8-d1a7a7bdeb33 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/88fa923c-59ee-47bf-b7c8-d1a7a7bdeb33
+f7ecb466-c223-40c7-a44b-6e1f8f5c6df4 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/f7ecb466-c223-40c7-a44b-6e1f8f5c6df4
+fcebd19c-12b9-43ae-bc54-7cae39396e9f .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fcebd19c-12b9-43ae-bc54-7cae39396e9f
+9ba533b6-61b6-437a-b4b6-be12aae025e5 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/9ba533b6-61b6-437a-b4b6-be12aae025e5
+ca8df3f8-7557-4730-bcca-3707776f5db4 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ca8df3f8-7557-4730-bcca-3707776f5db4
+b9e11546-5ec7-4464-8070-35c5510c13ff .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/d4145155-0ef1-409e-9236-261eb08f75d5/comments/b9e11546-5ec7-4464-8070-35c5510c13ff
+99abb100-a0e8-49b0-8799-a47e4d5fb0b3 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3
+bd5cef03-c389-4fab-8336-30a02ee97261 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/bd5cef03-c389-4fab-8336-30a02ee97261
+5718cbae-15da-4921-8371-5be69197c4ed .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed
+62c92ec0-678a-4834-ad69-76aff18e2227 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb/comments/62c92ec0-678a-4834-ad69-76aff18e2227
+27c176c2-26be-4a51-bb71-2aff47c5484b .be/27c176c2-26be-4a51-bb71-2aff47c5484b
+70b1e7f3-6446-45dc-91e5-e338d51770aa .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/99abb100-a0e8-49b0-8799-a47e4d5fb0b3/comments/70b1e7f3-6446-45dc-91e5-e338d51770aa
+fe5d2894-18a6-4864-b7e6-1eba7e300425 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/fe5d2894-18a6-4864-b7e6-1eba7e300425
+ad8fee41-b8dd-4c4e-85e1-4ab96923cecb .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/ad8fee41-b8dd-4c4e-85e1-4ab96923cecb
+0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/5718cbae-15da-4921-8371-5be69197c4ed/comments/0b63aae5-7ff9-4980-98ab-d13c8ffaa0aa
+019f1b74-7113-4213-8b66-b63ae63fa603 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/019f1b74-7113-4213-8b66-b63ae63fa603
+989f85c8-3941-4a97-a447-bdbf0fbbd7f4 .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/989f85c8-3941-4a97-a447-bdbf0fbbd7f4
+e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa .be/27c176c2-26be-4a51-bb71-2aff47c5484b/bugs/e16d92aa-df09-4851-b6a0-3ed0ea2ff0fa
diff --git a/.be/version b/.be/version
new file mode 100644
index 0000000..e7aade4
--- /dev/null
+++ b/.be/version
@@ -0,0 +1 @@
+Bugs Everywhere Directory v1.4
diff --git a/Makefile b/Makefile
index e69e678..6087a94 100644
--- a/Makefile
+++ b/Makefile
@@ -20,3 +20,6 @@ bugzilla-triage.xpi: package.json lib/*.js docs/*
install.rdf ;\
zip -9rmqT bugzilla-triage.xpi install.rdf ;\
make -C $(WEBDIR)
+
+clean:
+ find . -name \*~ -print -delete
diff --git a/chip-data/ati/drm_pciids.awk b/chip-data/ati/drm_pciids.awk
new file mode 100755
index 0000000..898f496
--- /dev/null
+++ b/chip-data/ati/drm_pciids.awk
@@ -0,0 +1,94 @@
+#!/usr/bin/gawk -f
+
+BEGIN {
+ FS=", "
+
+ # NOTE: please edit flags template as well
+ flag_letter["RADEON_IS_MOBILITY"] = "m"
+ flag_letter["RADEON_NEW_MEMMAP"] = "M"
+ flag_letter["RADEON_IS_IGP"] = "i"
+ flag_letter["RADEON_IS_IGPGART"] = "I"
+ flag_letter["RADEON_SINGLE_CRTC"] = "c"
+ flags_template = "mMiIc"
+ first_line = ""
+ printf("{\n")
+}
+
+function error(f, s1, s2) {
+ printf("%s:%d: " f "\n", FILENAME, NR, s1, s2) >"/dev/stderr"
+ error_code = 1
+}
+
+function flag_to_letter(f_name)
+{
+ if (f_name in flag_letter) {
+ return flag_letter[f_name]
+ } else {
+ error("unknown flag %s%s", f_name)
+ return f_name
+ }
+}
+
+function format_flags(f_code, i, n, l, out) {
+ n = length(flags_template)
+ for (i=1; i<=n; i++) {
+ l = substr(flags_template, i, 1)
+ out = out f_code[l]
+ delete f_code[l]
+ }
+ for (l in f_code) {
+ out = out f_code[l]
+ if (length(l)==1)
+ error("flag \"%s\" missing from flags_template", l, "")
+ }
+ if (length(out)>0) {
+ out = ",\"" out "\""
+ }
+ return out
+}
+
+/^[[:blank:]]+{0x/ {
+ sub(/^[[:blank:]]+{/,"")
+ sub(/},[[:blank:]]*\\$/,"")
+
+ id_vendor = $1; sub(/^0x/, "", id_vendor)
+ id_type = $2; sub(/^0x/, "", id_type)
+
+ flags = $7
+
+ if (flags == "0")
+ next
+
+ n_flag_arr = split(flags, flag_arr, "|")
+ first_flag = flag_arr[1]
+ delete f_code
+ for (i=2; i<=n_flag_arr; i++) {
+ l = flag_to_letter(flag_arr[i])
+ f_code[l] = l
+ }
+
+ formatted_flags = format_flags(f_code)
+
+ # second param to gensub is the replacement text:
+ ## chip_type = tolower(gensub(/^CHIP_/, "", "", first_flag))
+ chip_type = gensub(/^CHIP_/, "", "", first_flag)
+
+ if (length(first_line) > 0) {
+ printf(",\n")
+ } else {
+ first_line = "TRUE"
+ }
+ if ((chip_type in types) && types[chip_type] != first_flag)
+ error("chip name collision: %s vs. %s", \
+ types[chip_type], first_flag)
+
+ types[chip_type] = first_flag
+
+ printf("\t\"%s,%s\":[\"%s\"%s]", toupper(id_vendor), toupper(id_type),\
+ chip_type, formatted_flags)
+}
+
+END {
+ printf("\n}\n")
+ exit error_code
+}
diff --git a/chip-data/ati/drm_pciids.json b/chip-data/ati/drm_pciids.json
new file mode 100644
index 0000000..2db2758
--- /dev/null
+++ b/chip-data/ati/drm_pciids.json
@@ -0,0 +1,490 @@
+{
+ "1002,3150":["RV380","m"],
+ "1002,3152":["RV380","mM"],
+ "1002,3154":["RV380","mM"],
+ "1002,3155":["RV380","mM"],
+ "1002,3E50":["RV380","M"],
+ "1002,3E54":["RV380","M"],
+ "1002,4136":["RS100","i"],
+ "1002,4137":["RS200","i"],
+ "1002,4144":["R300"],
+ "1002,4145":["R300"],
+ "1002,4146":["R300"],
+ "1002,4147":["R300"],
+ "1002,4148":["R350"],
+ "1002,4149":["R350"],
+ "1002,414A":["R350"],
+ "1002,414B":["R350"],
+ "1002,4150":["RV350"],
+ "1002,4151":["RV350"],
+ "1002,4152":["RV350"],
+ "1002,4153":["RV350"],
+ "1002,4154":["RV350"],
+ "1002,4155":["RV350"],
+ "1002,4156":["RV350"],
+ "1002,4237":["RS200","i"],
+ "1002,4242":["R200"],
+ "1002,4336":["RS100","mi"],
+ "1002,4337":["RS200","mi"],
+ "1002,4437":["RS200","mi"],
+ "1002,4966":["RV250"],
+ "1002,4967":["RV250"],
+ "1002,4A48":["R420","M"],
+ "1002,4A49":["R420","M"],
+ "1002,4A4A":["R420","M"],
+ "1002,4A4B":["R420","M"],
+ "1002,4A4C":["R420","M"],
+ "1002,4A4D":["R420","M"],
+ "1002,4A4E":["R420","mM"],
+ "1002,4A4F":["R420","M"],
+ "1002,4A50":["R420","M"],
+ "1002,4A54":["R420","M"],
+ "1002,4B48":["R420","M"],
+ "1002,4B49":["R420","M"],
+ "1002,4B4A":["R420","M"],
+ "1002,4B4B":["R420","M"],
+ "1002,4B4C":["R420","M"],
+ "1002,4C57":["RV200","m"],
+ "1002,4C58":["RV200","m"],
+ "1002,4C59":["RV100","m"],
+ "1002,4C5A":["RV100","m"],
+ "1002,4C64":["RV250","m"],
+ "1002,4C66":["RV250","m"],
+ "1002,4C67":["RV250","m"],
+ "1002,4E44":["R300"],
+ "1002,4E45":["R300"],
+ "1002,4E46":["R300"],
+ "1002,4E47":["R300"],
+ "1002,4E48":["R350"],
+ "1002,4E49":["R350"],
+ "1002,4E4A":["R350"],
+ "1002,4E4B":["R350"],
+ "1002,4E50":["RV350","m"],
+ "1002,4E51":["RV350","m"],
+ "1002,4E52":["RV350","m"],
+ "1002,4E53":["RV350","m"],
+ "1002,4E54":["RV350","m"],
+ "1002,4E56":["RV350","m"],
+ "1002,5144":["R100","c"],
+ "1002,5145":["R100","c"],
+ "1002,5146":["R100","c"],
+ "1002,5147":["R100","c"],
+ "1002,5148":["R200"],
+ "1002,514C":["R200"],
+ "1002,514D":["R200"],
+ "1002,5157":["RV200"],
+ "1002,5158":["RV200"],
+ "1002,5159":["RV100"],
+ "1002,515A":["RV100"],
+ "1002,515E":["RV100","c"],
+ "1002,5460":["RV380","m"],
+ "1002,5462":["RV380","m"],
+ "1002,5464":["RV380","m"],
+ "1002,5548":["R423","M"],
+ "1002,5549":["R423","M"],
+ "1002,554A":["R423","M"],
+ "1002,554B":["R423","M"],
+ "1002,554C":["R423","M"],
+ "1002,554D":["R423","M"],
+ "1002,554E":["R423","M"],
+ "1002,554F":["R423","M"],
+ "1002,5550":["R423","M"],
+ "1002,5551":["R423","M"],
+ "1002,5552":["R423","M"],
+ "1002,5554":["R423","M"],
+ "1002,564A":["RV410","mM"],
+ "1002,564B":["RV410","mM"],
+ "1002,564F":["RV410","mM"],
+ "1002,5652":["RV410","mM"],
+ "1002,5653":["RV410","mM"],
+ "1002,5657":["RV410","M"],
+ "1002,5834":["RS300","i"],
+ "1002,5835":["RS300","mi"],
+ "1002,5954":["RS480","miI"],
+ "1002,5955":["RS480","miI"],
+ "1002,5974":["RS480","miI"],
+ "1002,5975":["RS480","miI"],
+ "1002,5960":["RV280"],
+ "1002,5961":["RV280"],
+ "1002,5962":["RV280"],
+ "1002,5964":["RV280"],
+ "1002,5965":["RV280"],
+ "1002,5969":["RV100","c"],
+ "1002,5A41":["RS400","iI"],
+ "1002,5A42":["RS400","miI"],
+ "1002,5A61":["RS400","iI"],
+ "1002,5A62":["RS400","miI"],
+ "1002,5B60":["RV380","M"],
+ "1002,5B62":["RV380","M"],
+ "1002,5B63":["RV380","M"],
+ "1002,5B64":["RV380","M"],
+ "1002,5B65":["RV380","M"],
+ "1002,5C61":["RV280","m"],
+ "1002,5C63":["RV280","m"],
+ "1002,5D48":["R423","mM"],
+ "1002,5D49":["R423","mM"],
+ "1002,5D4A":["R423","mM"],
+ "1002,5D4C":["R423","M"],
+ "1002,5D4D":["R423","M"],
+ "1002,5D4E":["R423","M"],
+ "1002,5D4F":["R423","M"],
+ "1002,5D50":["R423","M"],
+ "1002,5D52":["R423","M"],
+ "1002,5D57":["R423","M"],
+ "1002,5E48":["RV410","M"],
+ "1002,5E4A":["RV410","M"],
+ "1002,5E4B":["RV410","M"],
+ "1002,5E4C":["RV410","M"],
+ "1002,5E4D":["RV410","M"],
+ "1002,5E4F":["RV410","M"],
+ "1002,6720":["BARTS","mM"],
+ "1002,6721":["BARTS","mM"],
+ "1002,6722":["BARTS","M"],
+ "1002,6723":["BARTS","M"],
+ "1002,6724":["BARTS","mM"],
+ "1002,6725":["BARTS","mM"],
+ "1002,6726":["BARTS","M"],
+ "1002,6727":["BARTS","M"],
+ "1002,6728":["BARTS","M"],
+ "1002,6729":["BARTS","M"],
+ "1002,6738":["BARTS","M"],
+ "1002,6739":["BARTS","M"],
+ "1002,6740":["TURKS","mM"],
+ "1002,6741":["TURKS","mM"],
+ "1002,6742":["TURKS","mM"],
+ "1002,6743":["TURKS","mM"],
+ "1002,6744":["TURKS","mM"],
+ "1002,6745":["TURKS","mM"],
+ "1002,6746":["TURKS","M"],
+ "1002,6747":["TURKS","M"],
+ "1002,6748":["TURKS","M"],
+ "1002,6749":["TURKS","M"],
+ "1002,6750":["TURKS","M"],
+ "1002,6758":["TURKS","M"],
+ "1002,6759":["TURKS","M"],
+ "1002,6760":["CAICOS","mM"],
+ "1002,6761":["CAICOS","mM"],
+ "1002,6762":["CAICOS","M"],
+ "1002,6763":["CAICOS","M"],
+ "1002,6764":["CAICOS","mM"],
+ "1002,6765":["CAICOS","mM"],
+ "1002,6766":["CAICOS","M"],
+ "1002,6767":["CAICOS","M"],
+ "1002,6768":["CAICOS","M"],
+ "1002,6770":["CAICOS","M"],
+ "1002,6779":["CAICOS","M"],
+ "1002,6880":["CYPRESS","mM"],
+ "1002,6888":["CYPRESS","M"],
+ "1002,6889":["CYPRESS","M"],
+ "1002,688A":["CYPRESS","M"],
+ "1002,688C":["CYPRESS","M"],
+ "1002,688D":["CYPRESS","M"],
+ "1002,6898":["CYPRESS","M"],
+ "1002,6899":["CYPRESS","M"],
+ "1002,689C":["HEMLOCK","M"],
+ "1002,689D":["HEMLOCK","M"],
+ "1002,689E":["CYPRESS","M"],
+ "1002,68A0":["JUNIPER","mM"],
+ "1002,68A1":["JUNIPER","mM"],
+ "1002,68A8":["JUNIPER","M"],
+ "1002,68A9":["JUNIPER","M"],
+ "1002,68B0":["JUNIPER","mM"],
+ "1002,68B8":["JUNIPER","M"],
+ "1002,68B9":["JUNIPER","M"],
+ "1002,68BE":["JUNIPER","M"],
+ "1002,68C0":["REDWOOD","mM"],
+ "1002,68C1":["REDWOOD","mM"],
+ "1002,68C7":["REDWOOD","mM"],
+ "1002,68C8":["REDWOOD","M"],
+ "1002,68C9":["REDWOOD","M"],
+ "1002,68D8":["REDWOOD","M"],
+ "1002,68D9":["REDWOOD","M"],
+ "1002,68DA":["REDWOOD","M"],
+ "1002,68DE":["REDWOOD","M"],
+ "1002,68E0":["CEDAR","mM"],
+ "1002,68E1":["CEDAR","mM"],
+ "1002,68E4":["CEDAR","mM"],
+ "1002,68E5":["CEDAR","mM"],
+ "1002,68E8":["CEDAR","M"],
+ "1002,68E9":["CEDAR","M"],
+ "1002,68F1":["CEDAR","M"],
+ "1002,68F2":["CEDAR","M"],
+ "1002,68F8":["CEDAR","M"],
+ "1002,68F9":["CEDAR","M"],
+ "1002,68FE":["CEDAR","M"],
+ "1002,7100":["R520","M"],
+ "1002,7101":["R520","mM"],
+ "1002,7102":["R520","mM"],
+ "1002,7103":["R520","mM"],
+ "1002,7104":["R520","M"],
+ "1002,7105":["R520","M"],
+ "1002,7106":["R520","mM"],
+ "1002,7108":["R520","M"],
+ "1002,7109":["R520","M"],
+ "1002,710A":["R520","M"],
+ "1002,710B":["R520","M"],
+ "1002,710C":["R520","M"],
+ "1002,710E":["R520","M"],
+ "1002,710F":["R520","M"],
+ "1002,7140":["RV515","M"],
+ "1002,7141":["RV515","M"],
+ "1002,7142":["RV515","M"],
+ "1002,7143":["RV515","M"],
+ "1002,7144":["RV515","mM"],
+ "1002,7145":["RV515","mM"],
+ "1002,7146":["RV515","M"],
+ "1002,7147":["RV515","M"],
+ "1002,7149":["RV515","mM"],
+ "1002,714A":["RV515","mM"],
+ "1002,714B":["RV515","mM"],
+ "1002,714C":["RV515","mM"],
+ "1002,714D":["RV515","M"],
+ "1002,714E":["RV515","M"],
+ "1002,714F":["RV515","M"],
+ "1002,7151":["RV515","M"],
+ "1002,7152":["RV515","M"],
+ "1002,7153":["RV515","M"],
+ "1002,715E":["RV515","M"],
+ "1002,715F":["RV515","M"],
+ "1002,7180":["RV515","M"],
+ "1002,7181":["RV515","M"],
+ "1002,7183":["RV515","M"],
+ "1002,7186":["RV515","mM"],
+ "1002,7187":["RV515","M"],
+ "1002,7188":["RV515","mM"],
+ "1002,718A":["RV515","mM"],
+ "1002,718B":["RV515","mM"],
+ "1002,718C":["RV515","mM"],
+ "1002,718D":["RV515","mM"],
+ "1002,718F":["RV515","M"],
+ "1002,7193":["RV515","M"],
+ "1002,7196":["RV515","mM"],
+ "1002,719B":["RV515","M"],
+ "1002,719F":["RV515","M"],
+ "1002,71C0":["RV530","M"],
+ "1002,71C1":["RV530","M"],
+ "1002,71C2":["RV530","M"],
+ "1002,71C3":["RV530","M"],
+ "1002,71C4":["RV530","mM"],
+ "1002,71C5":["RV530","mM"],
+ "1002,71C6":["RV530","M"],
+ "1002,71C7":["RV530","M"],
+ "1002,71CD":["RV530","M"],
+ "1002,71CE":["RV530","M"],
+ "1002,71D2":["RV530","M"],
+ "1002,71D4":["RV530","mM"],
+ "1002,71D5":["RV530","mM"],
+ "1002,71D6":["RV530","mM"],
+ "1002,71DA":["RV530","M"],
+ "1002,71DE":["RV530","mM"],
+ "1002,7200":["RV515","M"],
+ "1002,7210":["RV515","mM"],
+ "1002,7211":["RV515","mM"],
+ "1002,7240":["R580","M"],
+ "1002,7243":["R580","M"],
+ "1002,7244":["R580","M"],
+ "1002,7245":["R580","M"],
+ "1002,7246":["R580","M"],
+ "1002,7247":["R580","M"],
+ "1002,7248":["R580","M"],
+ "1002,7249":["R580","M"],
+ "1002,724A":["R580","M"],
+ "1002,724B":["R580","M"],
+ "1002,724C":["R580","M"],
+ "1002,724D":["R580","M"],
+ "1002,724E":["R580","M"],
+ "1002,724F":["R580","M"],
+ "1002,7280":["RV570","M"],
+ "1002,7281":["RV560","M"],
+ "1002,7283":["RV560","M"],
+ "1002,7284":["R580","mM"],
+ "1002,7287":["RV560","M"],
+ "1002,7288":["RV570","M"],
+ "1002,7289":["RV570","M"],
+ "1002,728B":["RV570","M"],
+ "1002,728C":["RV570","M"],
+ "1002,7290":["RV560","M"],
+ "1002,7291":["RV560","M"],
+ "1002,7293":["RV560","M"],
+ "1002,7297":["RV560","M"],
+ "1002,7834":["RS300","Mi"],
+ "1002,7835":["RS300","mMi"],
+ "1002,791E":["RS690","MiI"],
+ "1002,791F":["RS690","MiI"],
+ "1002,793F":["RS600","Mi"],
+ "1002,7941":["RS600","Mi"],
+ "1002,7942":["RS600","Mi"],
+ "1002,796C":["RS740","MiI"],
+ "1002,796D":["RS740","MiI"],
+ "1002,796E":["RS740","MiI"],
+ "1002,796F":["RS740","MiI"],
+ "1002,9400":["R600","M"],
+ "1002,9401":["R600","M"],
+ "1002,9402":["R600","M"],
+ "1002,9403":["R600","M"],
+ "1002,9405":["R600","M"],
+ "1002,940A":["R600","M"],
+ "1002,940B":["R600","M"],
+ "1002,940F":["R600","M"],
+ "1002,94A0":["RV740","mM"],
+ "1002,94A1":["RV740","mM"],
+ "1002,94A3":["RV740","mM"],
+ "1002,94B1":["RV740","M"],
+ "1002,94B3":["RV740","M"],
+ "1002,94B4":["RV740","M"],
+ "1002,94B5":["RV740","M"],
+ "1002,94B9":["RV740","mM"],
+ "1002,9440":["RV770","M"],
+ "1002,9441":["RV770","M"],
+ "1002,9442":["RV770","M"],
+ "1002,9443":["RV770","M"],
+ "1002,9444":["RV770","M"],
+ "1002,9446":["RV770","M"],
+ "1002,944A":["RV770","mM"],
+ "1002,944B":["RV770","mM"],
+ "1002,944C":["RV770","M"],
+ "1002,944E":["RV770","M"],
+ "1002,9450":["RV770","M"],
+ "1002,9452":["RV770","M"],
+ "1002,9456":["RV770","M"],
+ "1002,945A":["RV770","mM"],
+ "1002,945B":["RV770","mM"],
+ "1002,945E":["RV770","mM"],
+ "1002,9460":["RV770","M"],
+ "1002,9462":["RV770","M"],
+ "1002,946A":["RV770","mM"],
+ "1002,946B":["RV770","mM"],
+ "1002,947A":["RV770","mM"],
+ "1002,947B":["RV770","mM"],
+ "1002,9480":["RV730","mM"],
+ "1002,9487":["RV730","M"],
+ "1002,9488":["RV730","mM"],
+ "1002,9489":["RV730","mM"],
+ "1002,948A":["RV730","mM"],
+ "1002,948F":["RV730","M"],
+ "1002,9490":["RV730","M"],
+ "1002,9491":["RV730","mM"],
+ "1002,9495":["RV730","M"],
+ "1002,9498":["RV730","M"],
+ "1002,949C":["RV730","M"],
+ "1002,949E":["RV730","M"],
+ "1002,949F":["RV730","M"],
+ "1002,94C0":["RV610","M"],
+ "1002,94C1":["RV610","M"],
+ "1002,94C3":["RV610","M"],
+ "1002,94C4":["RV610","M"],
+ "1002,94C5":["RV610","M"],
+ "1002,94C6":["RV610","M"],
+ "1002,94C7":["RV610","M"],
+ "1002,94C8":["RV610","mM"],
+ "1002,94C9":["RV610","mM"],
+ "1002,94CB":["RV610","mM"],
+ "1002,94CC":["RV610","M"],
+ "1002,94CD":["RV610","M"],
+ "1002,9500":["RV670","M"],
+ "1002,9501":["RV670","M"],
+ "1002,9504":["RV670","mM"],
+ "1002,9505":["RV670","M"],
+ "1002,9506":["RV670","mM"],
+ "1002,9507":["RV670","M"],
+ "1002,9508":["RV670","mM"],
+ "1002,9509":["RV670","mM"],
+ "1002,950F":["RV670","M"],
+ "1002,9511":["RV670","M"],
+ "1002,9515":["RV670","M"],
+ "1002,9517":["RV670","M"],
+ "1002,9519":["RV670","M"],
+ "1002,9540":["RV710","M"],
+ "1002,9541":["RV710","M"],
+ "1002,9542":["RV710","M"],
+ "1002,954E":["RV710","M"],
+ "1002,954F":["RV710","M"],
+ "1002,9552":["RV710","mM"],
+ "1002,9553":["RV710","mM"],
+ "1002,9555":["RV710","mM"],
+ "1002,9557":["RV710","mM"],
+ "1002,955F":["RV710","mM"],
+ "1002,9580":["RV630","M"],
+ "1002,9581":["RV630","mM"],
+ "1002,9583":["RV630","mM"],
+ "1002,9586":["RV630","M"],
+ "1002,9587":["RV630","M"],
+ "1002,9588":["RV630","M"],
+ "1002,9589":["RV630","M"],
+ "1002,958A":["RV630","M"],
+ "1002,958B":["RV630","mM"],
+ "1002,958C":["RV630","M"],
+ "1002,958D":["RV630","M"],
+ "1002,958E":["RV630","M"],
+ "1002,958F":["RV630","mM"],
+ "1002,9590":["RV635","M"],
+ "1002,9591":["RV635","mM"],
+ "1002,9593":["RV635","mM"],
+ "1002,9595":["RV635","mM"],
+ "1002,9596":["RV635","M"],
+ "1002,9597":["RV635","M"],
+ "1002,9598":["RV635","M"],
+ "1002,9599":["RV635","M"],
+ "1002,959B":["RV635","mM"],
+ "1002,95C0":["RV620","M"],
+ "1002,95C2":["RV620","mM"],
+ "1002,95C4":["RV620","mM"],
+ "1002,95C5":["RV620","M"],
+ "1002,95C6":["RV620","M"],
+ "1002,95C7":["RV620","M"],
+ "1002,95C9":["RV620","M"],
+ "1002,95CC":["RV620","M"],
+ "1002,95CD":["RV620","M"],
+ "1002,95CE":["RV620","M"],
+ "1002,95CF":["RV620","M"],
+ "1002,9610":["RS780","Mi"],
+ "1002,9611":["RS780","Mi"],
+ "1002,9612":["RS780","Mi"],
+ "1002,9613":["RS780","Mi"],
+ "1002,9614":["RS780","Mi"],
+ "1002,9615":["RS780","Mi"],
+ "1002,9616":["RS780","Mi"],
+ "1002,9710":["RS880","Mi"],
+ "1002,9711":["RS880","Mi"],
+ "1002,9712":["RS880","mMi"],
+ "1002,9713":["RS880","mMi"],
+ "1002,9714":["RS880","Mi"],
+ "1002,9715":["RS880","Mi"],
+ "1002,9802":["PALM","Mi"],
+ "1002,9803":["PALM","Mi"],
+ "1002,9804":["PALM","Mi"],
+ "1002,9805":["PALM","Mi"],
+ "102B,0520":["MGA_CARD_TYPE_G200"],
+ "102B,0521":["MGA_CARD_TYPE_G200"],
+ "102B,0525":["MGA_CARD_TYPE_G400"],
+ "102B,2527":["MGA_CARD_TYPE_G550"],
+ "1039,6330":["SIS_CHIP_315"],
+ "18CA,0040":["SIS_CHIP_315"],
+ "18CA,0042":["SIS_CHIP_315"],
+ "1106,3118":["VIA_PRO_GROUP_A"],
+ "1106,3230":["VIA_DX9_0"],
+ "1106,3157":["VIA_PRO_GROUP_A"],
+ "5333,8A20":["S3_SAVAGE3D"],
+ "5333,8A21":["S3_SAVAGE3D"],
+ "5333,8A22":["S3_SAVAGE4"],
+ "5333,8A23":["S3_SAVAGE4"],
+ "5333,8C10":["S3_SAVAGE_MX"],
+ "5333,8C11":["S3_SAVAGE_MX"],
+ "5333,8C12":["S3_SAVAGE_MX"],
+ "5333,8C13":["S3_SAVAGE_MX"],
+ "5333,8C22":["S3_SUPERSAVAGE"],
+ "5333,8C24":["S3_SUPERSAVAGE"],
+ "5333,8C26":["S3_SUPERSAVAGE"],
+ "5333,8C2A":["S3_SUPERSAVAGE"],
+ "5333,8C2B":["S3_SUPERSAVAGE"],
+ "5333,8C2C":["S3_SUPERSAVAGE"],
+ "5333,8C2D":["S3_SUPERSAVAGE"],
+ "5333,8C2E":["S3_SUPERSAVAGE"],
+ "5333,8C2F":["S3_SUPERSAVAGE"],
+ "5333,8A25":["S3_PROSAVAGE"],
+ "5333,8A26":["S3_PROSAVAGE"],
+ "5333,8D01":["S3_TWISTER"],
+ "5333,8D02":["S3_TWISTER"],
+ "5333,8D03":["S3_PROSAVAGEDDR"],
+ "5333,8D04":["S3_PROSAVAGEDDR"]
+}
diff --git a/chip-data/chipNames.json b/chip-data/chipNames.json
new file mode 100644
index 0000000..b628527
--- /dev/null
+++ b/chip-data/chipNames.json
@@ -0,0 +1,559 @@
+{
+ "1002,3150":["RV380","m"],
+ "1002,3152":["RV380","mM"],
+ "1002,3154":["RV380","mM"],
+ "1002,3155":["RV380","mM"],
+ "1002,3E50":["RV380","M"],
+ "1002,3E54":["RV380","M"],
+ "1002,4136":["RS100","i"],
+ "1002,4137":["RS200","i"],
+ "1002,4144":["R300"],
+ "1002,4145":["R300"],
+ "1002,4146":["R300"],
+ "1002,4147":["R300"],
+ "1002,4148":["R350"],
+ "1002,4149":["R350"],
+ "1002,414A":["R350"],
+ "1002,414B":["R350"],
+ "1002,4150":["RV350"],
+ "1002,4151":["RV350"],
+ "1002,4152":["RV350"],
+ "1002,4153":["RV350"],
+ "1002,4154":["RV350"],
+ "1002,4155":["RV350"],
+ "1002,4156":["RV350"],
+ "1002,4237":["RS200","i"],
+ "1002,4242":["R200"],
+ "1002,4336":["RS100","mi"],
+ "1002,4337":["RS200","mi"],
+ "1002,4437":["RS200","mi"],
+ "1002,4966":["RV250"],
+ "1002,4967":["RV250"],
+ "1002,4A48":["R420","M"],
+ "1002,4A49":["R420","M"],
+ "1002,4A4A":["R420","M"],
+ "1002,4A4B":["R420","M"],
+ "1002,4A4C":["R420","M"],
+ "1002,4A4D":["R420","M"],
+ "1002,4A4E":["R420","mM"],
+ "1002,4A4F":["R420","M"],
+ "1002,4A50":["R420","M"],
+ "1002,4A54":["R420","M"],
+ "1002,4B48":["R420","M"],
+ "1002,4B49":["R420","M"],
+ "1002,4B4A":["R420","M"],
+ "1002,4B4B":["R420","M"],
+ "1002,4B4C":["R420","M"],
+ "1002,4C57":["RV200","m"],
+ "1002,4C58":["RV200","m"],
+ "1002,4C59":["RV100","m"],
+ "1002,4C5A":["RV100","m"],
+ "1002,4C64":["RV250","m"],
+ "1002,4C66":["RV250","m"],
+ "1002,4C67":["RV250","m"],
+ "1002,4E44":["R300"],
+ "1002,4E45":["R300"],
+ "1002,4E46":["R300"],
+ "1002,4E47":["R300"],
+ "1002,4E48":["R350"],
+ "1002,4E49":["R350"],
+ "1002,4E4A":["R350"],
+ "1002,4E4B":["R350"],
+ "1002,4E50":["RV350","m"],
+ "1002,4E51":["RV350","m"],
+ "1002,4E52":["RV350","m"],
+ "1002,4E53":["RV350","m"],
+ "1002,4E54":["RV350","m"],
+ "1002,4E56":["RV350","m"],
+ "1002,5144":["R100","c"],
+ "1002,5145":["R100","c"],
+ "1002,5146":["R100","c"],
+ "1002,5147":["R100","c"],
+ "1002,5148":["R200"],
+ "1002,514C":["R200"],
+ "1002,514D":["R200"],
+ "1002,5157":["RV200"],
+ "1002,5158":["RV200"],
+ "1002,5159":["RV100"],
+ "1002,515A":["RV100"],
+ "1002,515E":["RV100","c"],
+ "1002,5460":["RV380","m"],
+ "1002,5462":["RV380","m"],
+ "1002,5464":["RV380","m"],
+ "1002,5548":["R423","M"],
+ "1002,5549":["R423","M"],
+ "1002,554A":["R423","M"],
+ "1002,554B":["R423","M"],
+ "1002,554C":["R423","M"],
+ "1002,554D":["R423","M"],
+ "1002,554E":["R423","M"],
+ "1002,554F":["R423","M"],
+ "1002,5550":["R423","M"],
+ "1002,5551":["R423","M"],
+ "1002,5552":["R423","M"],
+ "1002,5554":["R423","M"],
+ "1002,564A":["RV410","mM"],
+ "1002,564B":["RV410","mM"],
+ "1002,564F":["RV410","mM"],
+ "1002,5652":["RV410","mM"],
+ "1002,5653":["RV410","mM"],
+ "1002,5657":["RV410","M"],
+ "1002,5834":["RS300","i"],
+ "1002,5835":["RS300","mi"],
+ "1002,5954":["RS480","miI"],
+ "1002,5955":["RS480","miI"],
+ "1002,5974":["RS480","miI"],
+ "1002,5975":["RS480","miI"],
+ "1002,5960":["RV280"],
+ "1002,5961":["RV280"],
+ "1002,5962":["RV280"],
+ "1002,5964":["RV280"],
+ "1002,5965":["RV280"],
+ "1002,5969":["RV100","c"],
+ "1002,5A41":["RS400","iI"],
+ "1002,5A42":["RS400","miI"],
+ "1002,5A61":["RS400","iI"],
+ "1002,5A62":["RS400","miI"],
+ "1002,5B60":["RV380","M"],
+ "1002,5B62":["RV380","M"],
+ "1002,5B63":["RV380","M"],
+ "1002,5B64":["RV380","M"],
+ "1002,5B65":["RV380","M"],
+ "1002,5C61":["RV280","m"],
+ "1002,5C63":["RV280","m"],
+ "1002,5D48":["R423","mM"],
+ "1002,5D49":["R423","mM"],
+ "1002,5D4A":["R423","mM"],
+ "1002,5D4C":["R423","M"],
+ "1002,5D4D":["R423","M"],
+ "1002,5D4E":["R423","M"],
+ "1002,5D4F":["R423","M"],
+ "1002,5D50":["R423","M"],
+ "1002,5D52":["R423","M"],
+ "1002,5D57":["R423","M"],
+ "1002,5E48":["RV410","M"],
+ "1002,5E4A":["RV410","M"],
+ "1002,5E4B":["RV410","M"],
+ "1002,5E4C":["RV410","M"],
+ "1002,5E4D":["RV410","M"],
+ "1002,5E4F":["RV410","M"],
+ "1002,6720":["BARTS","mM"],
+ "1002,6721":["BARTS","mM"],
+ "1002,6722":["BARTS","M"],
+ "1002,6723":["BARTS","M"],
+ "1002,6724":["BARTS","mM"],
+ "1002,6725":["BARTS","mM"],
+ "1002,6726":["BARTS","M"],
+ "1002,6727":["BARTS","M"],
+ "1002,6728":["BARTS","M"],
+ "1002,6729":["BARTS","M"],
+ "1002,6738":["BARTS","M"],
+ "1002,6739":["BARTS","M"],
+ "1002,6740":["TURKS","mM"],
+ "1002,6741":["TURKS","mM"],
+ "1002,6742":["TURKS","mM"],
+ "1002,6743":["TURKS","mM"],
+ "1002,6744":["TURKS","mM"],
+ "1002,6745":["TURKS","mM"],
+ "1002,6746":["TURKS","M"],
+ "1002,6747":["TURKS","M"],
+ "1002,6748":["TURKS","M"],
+ "1002,6749":["TURKS","M"],
+ "1002,6750":["TURKS","M"],
+ "1002,6758":["TURKS","M"],
+ "1002,6759":["TURKS","M"],
+ "1002,6760":["CAICOS","mM"],
+ "1002,6761":["CAICOS","mM"],
+ "1002,6762":["CAICOS","M"],
+ "1002,6763":["CAICOS","M"],
+ "1002,6764":["CAICOS","mM"],
+ "1002,6765":["CAICOS","mM"],
+ "1002,6766":["CAICOS","M"],
+ "1002,6767":["CAICOS","M"],
+ "1002,6768":["CAICOS","M"],
+ "1002,6770":["CAICOS","M"],
+ "1002,6779":["CAICOS","M"],
+ "1002,6880":["CYPRESS","mM"],
+ "1002,6888":["CYPRESS","M"],
+ "1002,6889":["CYPRESS","M"],
+ "1002,688A":["CYPRESS","M"],
+ "1002,688C":["CYPRESS","M"],
+ "1002,688D":["CYPRESS","M"],
+ "1002,6898":["CYPRESS","M"],
+ "1002,6899":["CYPRESS","M"],
+ "1002,689C":["HEMLOCK","M"],
+ "1002,689D":["HEMLOCK","M"],
+ "1002,689E":["CYPRESS","M"],
+ "1002,68A0":["JUNIPER","mM"],
+ "1002,68A1":["JUNIPER","mM"],
+ "1002,68A8":["JUNIPER","M"],
+ "1002,68A9":["JUNIPER","M"],
+ "1002,68B0":["JUNIPER","mM"],
+ "1002,68B8":["JUNIPER","M"],
+ "1002,68B9":["JUNIPER","M"],
+ "1002,68BE":["JUNIPER","M"],
+ "1002,68C0":["REDWOOD","mM"],
+ "1002,68C1":["REDWOOD","mM"],
+ "1002,68C7":["REDWOOD","mM"],
+ "1002,68C8":["REDWOOD","M"],
+ "1002,68C9":["REDWOOD","M"],
+ "1002,68D8":["REDWOOD","M"],
+ "1002,68D9":["REDWOOD","M"],
+ "1002,68DA":["REDWOOD","M"],
+ "1002,68DE":["REDWOOD","M"],
+ "1002,68E0":["CEDAR","mM"],
+ "1002,68E1":["CEDAR","mM"],
+ "1002,68E4":["CEDAR","mM"],
+ "1002,68E5":["CEDAR","mM"],
+ "1002,68E8":["CEDAR","M"],
+ "1002,68E9":["CEDAR","M"],
+ "1002,68F1":["CEDAR","M"],
+ "1002,68F2":["CEDAR","M"],
+ "1002,68F8":["CEDAR","M"],
+ "1002,68F9":["CEDAR","M"],
+ "1002,68FE":["CEDAR","M"],
+ "1002,7100":["R520","M"],
+ "1002,7101":["R520","mM"],
+ "1002,7102":["R520","mM"],
+ "1002,7103":["R520","mM"],
+ "1002,7104":["R520","M"],
+ "1002,7105":["R520","M"],
+ "1002,7106":["R520","mM"],
+ "1002,7108":["R520","M"],
+ "1002,7109":["R520","M"],
+ "1002,710A":["R520","M"],
+ "1002,710B":["R520","M"],
+ "1002,710C":["R520","M"],
+ "1002,710E":["R520","M"],
+ "1002,710F":["R520","M"],
+ "1002,7140":["RV515","M"],
+ "1002,7141":["RV515","M"],
+ "1002,7142":["RV515","M"],
+ "1002,7143":["RV515","M"],
+ "1002,7144":["RV515","mM"],
+ "1002,7145":["RV515","mM"],
+ "1002,7146":["RV515","M"],
+ "1002,7147":["RV515","M"],
+ "1002,7149":["RV515","mM"],
+ "1002,714A":["RV515","mM"],
+ "1002,714B":["RV515","mM"],
+ "1002,714C":["RV515","mM"],
+ "1002,714D":["RV515","M"],
+ "1002,714E":["RV515","M"],
+ "1002,714F":["RV515","M"],
+ "1002,7151":["RV515","M"],
+ "1002,7152":["RV515","M"],
+ "1002,7153":["RV515","M"],
+ "1002,715E":["RV515","M"],
+ "1002,715F":["RV515","M"],
+ "1002,7180":["RV515","M"],
+ "1002,7181":["RV515","M"],
+ "1002,7183":["RV515","M"],
+ "1002,7186":["RV515","mM"],
+ "1002,7187":["RV515","M"],
+ "1002,7188":["RV515","mM"],
+ "1002,718A":["RV515","mM"],
+ "1002,718B":["RV515","mM"],
+ "1002,718C":["RV515","mM"],
+ "1002,718D":["RV515","mM"],
+ "1002,718F":["RV515","M"],
+ "1002,7193":["RV515","M"],
+ "1002,7196":["RV515","mM"],
+ "1002,719B":["RV515","M"],
+ "1002,719F":["RV515","M"],
+ "1002,71C0":["RV530","M"],
+ "1002,71C1":["RV530","M"],
+ "1002,71C2":["RV530","M"],
+ "1002,71C3":["RV530","M"],
+ "1002,71C4":["RV530","mM"],
+ "1002,71C5":["RV530","mM"],
+ "1002,71C6":["RV530","M"],
+ "1002,71C7":["RV530","M"],
+ "1002,71CD":["RV530","M"],
+ "1002,71CE":["RV530","M"],
+ "1002,71D2":["RV530","M"],
+ "1002,71D4":["RV530","mM"],
+ "1002,71D5":["RV530","mM"],
+ "1002,71D6":["RV530","mM"],
+ "1002,71DA":["RV530","M"],
+ "1002,71DE":["RV530","mM"],
+ "1002,7200":["RV515","M"],
+ "1002,7210":["RV515","mM"],
+ "1002,7211":["RV515","mM"],
+ "1002,7240":["R580","M"],
+ "1002,7243":["R580","M"],
+ "1002,7244":["R580","M"],
+ "1002,7245":["R580","M"],
+ "1002,7246":["R580","M"],
+ "1002,7247":["R580","M"],
+ "1002,7248":["R580","M"],
+ "1002,7249":["R580","M"],
+ "1002,724A":["R580","M"],
+ "1002,724B":["R580","M"],
+ "1002,724C":["R580","M"],
+ "1002,724D":["R580","M"],
+ "1002,724E":["R580","M"],
+ "1002,724F":["R580","M"],
+ "1002,7280":["RV570","M"],
+ "1002,7281":["RV560","M"],
+ "1002,7283":["RV560","M"],
+ "1002,7284":["R580","mM"],
+ "1002,7287":["RV560","M"],
+ "1002,7288":["RV570","M"],
+ "1002,7289":["RV570","M"],
+ "1002,728B":["RV570","M"],
+ "1002,728C":["RV570","M"],
+ "1002,7290":["RV560","M"],
+ "1002,7291":["RV560","M"],
+ "1002,7293":["RV560","M"],
+ "1002,7297":["RV560","M"],
+ "1002,7834":["RS300","Mi"],
+ "1002,7835":["RS300","mMi"],
+ "1002,791E":["RS690","MiI"],
+ "1002,791F":["RS690","MiI"],
+ "1002,793F":["RS600","Mi"],
+ "1002,7941":["RS600","Mi"],
+ "1002,7942":["RS600","Mi"],
+ "1002,796C":["RS740","MiI"],
+ "1002,796D":["RS740","MiI"],
+ "1002,796E":["RS740","MiI"],
+ "1002,796F":["RS740","MiI"],
+ "1002,9400":["R600","M"],
+ "1002,9401":["R600","M"],
+ "1002,9402":["R600","M"],
+ "1002,9403":["R600","M"],
+ "1002,9405":["R600","M"],
+ "1002,940A":["R600","M"],
+ "1002,940B":["R600","M"],
+ "1002,940F":["R600","M"],
+ "1002,94A0":["RV740","mM"],
+ "1002,94A1":["RV740","mM"],
+ "1002,94A3":["RV740","mM"],
+ "1002,94B1":["RV740","M"],
+ "1002,94B3":["RV740","M"],
+ "1002,94B4":["RV740","M"],
+ "1002,94B5":["RV740","M"],
+ "1002,94B9":["RV740","mM"],
+ "1002,9440":["RV770","M"],
+ "1002,9441":["RV770","M"],
+ "1002,9442":["RV770","M"],
+ "1002,9443":["RV770","M"],
+ "1002,9444":["RV770","M"],
+ "1002,9446":["RV770","M"],
+ "1002,944A":["RV770","mM"],
+ "1002,944B":["RV770","mM"],
+ "1002,944C":["RV770","M"],
+ "1002,944E":["RV770","M"],
+ "1002,9450":["RV770","M"],
+ "1002,9452":["RV770","M"],
+ "1002,9456":["RV770","M"],
+ "1002,945A":["RV770","mM"],
+ "1002,945B":["RV770","mM"],
+ "1002,945E":["RV770","mM"],
+ "1002,9460":["RV770","M"],
+ "1002,9462":["RV770","M"],
+ "1002,946A":["RV770","mM"],
+ "1002,946B":["RV770","mM"],
+ "1002,947A":["RV770","mM"],
+ "1002,947B":["RV770","mM"],
+ "1002,9480":["RV730","mM"],
+ "1002,9487":["RV730","M"],
+ "1002,9488":["RV730","mM"],
+ "1002,9489":["RV730","mM"],
+ "1002,948A":["RV730","mM"],
+ "1002,948F":["RV730","M"],
+ "1002,9490":["RV730","M"],
+ "1002,9491":["RV730","mM"],
+ "1002,9495":["RV730","M"],
+ "1002,9498":["RV730","M"],
+ "1002,949C":["RV730","M"],
+ "1002,949E":["RV730","M"],
+ "1002,949F":["RV730","M"],
+ "1002,94C0":["RV610","M"],
+ "1002,94C1":["RV610","M"],
+ "1002,94C3":["RV610","M"],
+ "1002,94C4":["RV610","M"],
+ "1002,94C5":["RV610","M"],
+ "1002,94C6":["RV610","M"],
+ "1002,94C7":["RV610","M"],
+ "1002,94C8":["RV610","mM"],
+ "1002,94C9":["RV610","mM"],
+ "1002,94CB":["RV610","mM"],
+ "1002,94CC":["RV610","M"],
+ "1002,94CD":["RV610","M"],
+ "1002,9500":["RV670","M"],
+ "1002,9501":["RV670","M"],
+ "1002,9504":["RV670","mM"],
+ "1002,9505":["RV670","M"],
+ "1002,9506":["RV670","mM"],
+ "1002,9507":["RV670","M"],
+ "1002,9508":["RV670","mM"],
+ "1002,9509":["RV670","mM"],
+ "1002,950F":["RV670","M"],
+ "1002,9511":["RV670","M"],
+ "1002,9515":["RV670","M"],
+ "1002,9517":["RV670","M"],
+ "1002,9519":["RV670","M"],
+ "1002,9540":["RV710","M"],
+ "1002,9541":["RV710","M"],
+ "1002,9542":["RV710","M"],
+ "1002,954E":["RV710","M"],
+ "1002,954F":["RV710","M"],
+ "1002,9552":["RV710","mM"],
+ "1002,9553":["RV710","mM"],
+ "1002,9555":["RV710","mM"],
+ "1002,9557":["RV710","mM"],
+ "1002,955F":["RV710","mM"],
+ "1002,9580":["RV630","M"],
+ "1002,9581":["RV630","mM"],
+ "1002,9583":["RV630","mM"],
+ "1002,9586":["RV630","M"],
+ "1002,9587":["RV630","M"],
+ "1002,9588":["RV630","M"],
+ "1002,9589":["RV630","M"],
+ "1002,958A":["RV630","M"],
+ "1002,958B":["RV630","mM"],
+ "1002,958C":["RV630","M"],
+ "1002,958D":["RV630","M"],
+ "1002,958E":["RV630","M"],
+ "1002,958F":["RV630","mM"],
+ "1002,9590":["RV635","M"],
+ "1002,9591":["RV635","mM"],
+ "1002,9593":["RV635","mM"],
+ "1002,9595":["RV635","mM"],
+ "1002,9596":["RV635","M"],
+ "1002,9597":["RV635","M"],
+ "1002,9598":["RV635","M"],
+ "1002,9599":["RV635","M"],
+ "1002,959B":["RV635","mM"],
+ "1002,95C0":["RV620","M"],
+ "1002,95C2":["RV620","mM"],
+ "1002,95C4":["RV620","mM"],
+ "1002,95C5":["RV620","M"],
+ "1002,95C6":["RV620","M"],
+ "1002,95C7":["RV620","M"],
+ "1002,95C9":["RV620","M"],
+ "1002,95CC":["RV620","M"],
+ "1002,95CD":["RV620","M"],
+ "1002,95CE":["RV620","M"],
+ "1002,95CF":["RV620","M"],
+ "1002,9610":["RS780","Mi"],
+ "1002,9611":["RS780","Mi"],
+ "1002,9612":["RS780","Mi"],
+ "1002,9613":["RS780","Mi"],
+ "1002,9614":["RS780","Mi"],
+ "1002,9615":["RS780","Mi"],
+ "1002,9616":["RS780","Mi"],
+ "1002,9710":["RS880","Mi"],
+ "1002,9711":["RS880","Mi"],
+ "1002,9712":["RS880","mMi"],
+ "1002,9713":["RS880","mMi"],
+ "1002,9714":["RS880","Mi"],
+ "1002,9715":["RS880","Mi"],
+ "1002,9802":["PALM","Mi"],
+ "1002,9803":["PALM","Mi"],
+ "1002,9804":["PALM","Mi"],
+ "1002,9805":["PALM","Mi"],
+ "102B,0520":["MGA_CARD_TYPE_G200"],
+ "102B,0521":["MGA_CARD_TYPE_G200"],
+ "102B,0525":["MGA_CARD_TYPE_G400"],
+ "102B,2527":["MGA_CARD_TYPE_G550"],
+ "1039,6330":["SIS_CHIP_315"],
+ "18CA,0040":["SIS_CHIP_315"],
+ "18CA,0042":["SIS_CHIP_315"],
+ "1106,3118":["VIA_PRO_GROUP_A"],
+ "1106,3230":["VIA_DX9_0"],
+ "1106,3157":["VIA_PRO_GROUP_A"],
+ "5333,8A20":["S3_SAVAGE3D"],
+ "5333,8A21":["S3_SAVAGE3D"],
+ "5333,8A22":["S3_SAVAGE4"],
+ "5333,8A23":["S3_SAVAGE4"],
+ "5333,8C10":["S3_SAVAGE_MX"],
+ "5333,8C11":["S3_SAVAGE_MX"],
+ "5333,8C12":["S3_SAVAGE_MX"],
+ "5333,8C13":["S3_SAVAGE_MX"],
+ "5333,8C22":["S3_SUPERSAVAGE"],
+ "5333,8C24":["S3_SUPERSAVAGE"],
+ "5333,8C26":["S3_SUPERSAVAGE"],
+ "5333,8C2A":["S3_SUPERSAVAGE"],
+ "5333,8C2B":["S3_SUPERSAVAGE"],
+ "5333,8C2C":["S3_SUPERSAVAGE"],
+ "5333,8C2D":["S3_SUPERSAVAGE"],
+ "5333,8C2E":["S3_SUPERSAVAGE"],
+ "5333,8C2F":["S3_SUPERSAVAGE"],
+ "5333,8A25":["S3_PROSAVAGE"],
+ "5333,8A26":["S3_PROSAVAGE"],
+ "5333,8D01":["S3_TWISTER"],
+ "5333,8D02":["S3_TWISTER"],
+ "5333,8D03":["S3_PROSAVAGEDDR"],
+ "5333,8D04":["S3_PROSAVAGEDDR"],
+ "8086,7800":["Auburn"],
+ "8086,7120":["Whitney"],
+ "8086,7121":["Whitney"],
+ "8086,7122":["Whitney"],
+ "8086,7123":["Whitney"],
+ "8086,7124":["Whitney"],
+ "8086,7125":["Whitney"],
+ "8086,7126":["Whitney"],
+ "8086,7128":["Whitney"],
+ "8086,712a":["Whitney"],
+ "8086,3576":["Brookdale"],
+ "8086,3582":["Springdale"],
+ "8086,2582":["Grantsdale"],
+ "8086,2782":["Grantsdale"],
+ "8086,2592":["Alviso"],
+ "8086,2792":["Alviso"],
+ "8086,2772":["Lakeport"],
+ "8086,2776":["Lakeport"],
+ "8086,27A2":["Calistoga"],
+ "8086,27A6":["Calistoga"],
+ "8086,27AE":["Calistoga"],
+ "8086,2972":["Broadwater"],
+ "8086,2973":["Broadwater"],
+ "8086,2992":["Broadwater"],
+ "8086,2993":["Broadwater"],
+ "8086,29D2":["Bearlake"],
+ "8086,29D3":["Bearlake"],
+ "8086,29B2":["Bearlake"],
+ "8086,29B3":["Bearlake"],
+ "8086,29C2":["Bearlake"],
+ "8086,29C3":["Bearlake"],
+ "8086,A001":["Pineview"],
+ "8086,A002":["Pineview"],
+ "8086,A011":["Pineview"],
+ "8086,A012":["Pineview"],
+ "8086,8108":["Poulsbo"],
+ "8086,8109":["Poulsbo"],
+ "8086,4102":["Lincroft"],
+ "8086,29A2":["Broadwater"],
+ "8086,29A3":["Broadwater"],
+ "8086,2982":["Broadwater"],
+ "8086,2983":["Broadwater"],
+ "8086,2A02":["Crestline"],
+ "8086,2A03":["Crestline"],
+ "8086,2A12":["Crestline"],
+ "8086,2A13":["Crestline"],
+ "8086,2E42":["Eaglelake"],
+ "8086,2E43":["Eaglelake"],
+ "8086,2E92":["Eaglelake"],
+ "8086,2E93":["Eaglelake"],
+ "8086,2E12":["Eaglelake"],
+ "8086,2E13":["Eaglelake"],
+ "8086,2E32":["Eaglelake"],
+ "8086,2E33":["Eaglelake"],
+ "8086,2E22":["Eaglelake"],
+ "8086,2E23":["Eaglelake"],
+ "8086,2A42":["Cantiga"],
+ "8086,2A43":["Cantiga"],
+ "8086,0042":["Clarkdale"],
+ "8086,0046":["Arrandale"],
+ "8086,0080":["Ivy Bridge"],
+ "8086,0000":["Larrabee"],
+ "8086,0102":["Sandy Bridge"],
+ "8086,0106":["Sandy Bridge"],
+ "8086,0112":["Sandy Bridge"],
+ "8086,0116":["Sandy Bridge"],
+ "8086,0122":["Sandy Bridge"],
+ "8086,0126":["Sandy Bridge"],
+ "8086,010A":["Sandy Bridge"]
+}
diff --git a/chip-data/intel/Intel_GMA.csv b/chip-data/intel/Intel_GMA.csv
new file mode 100644
index 0000000..7117521
--- /dev/null
+++ b/chip-data/intel/Intel_GMA.csv
@@ -0,0 +1,69 @@
+Auburn|7800
+Whitney|7120
+Whitney|7121
+Whitney|7122
+Whitney|7123
+Whitney|7124
+Whitney|7125
+Whitney|7126
+Whitney|7128
+Whitney|712a
+Brookdale|3576
+Springdale|3582
+Grantsdale|2582
+Grantsdale|2782
+Alviso|2592
+Alviso|2792
+Lakeport|2772
+Lakeport|2776
+Calistoga|27A2
+Calistoga|27A6
+Calistoga|27AE
+Broadwater|2972
+Broadwater|2973
+Broadwater|2992
+Broadwater|2993
+Bearlake|29D2
+Bearlake|29D3
+Bearlake|29B2
+Bearlake|29B3
+Bearlake|29C2
+Bearlake|29C3
+Pineview|A001
+Pineview|A002
+Pineview|A011
+Pineview|A012
+Poulsbo|8108
+Poulsbo|8109
+Lincroft|4102
+Broadwater|29A2
+Broadwater|29A3
+Broadwater|2982
+Broadwater|2983
+Crestline|2A02
+Crestline|2A03
+Crestline|2A12
+Crestline|2A13
+Eaglelake|2E42
+Eaglelake|2E43
+Eaglelake|2E92
+Eaglelake|2E93
+Eaglelake|2E12
+Eaglelake|2E13
+Eaglelake|2E32
+Eaglelake|2E33
+Eaglelake|2E22
+Eaglelake|2E23
+Cantiga|2A42
+Cantiga|2A43
+Clarkdale|0042
+Arrandale|0046
+Ivy Bridge|0080
+Larrabee|NA
+Sandy Bridge|0102
+Sandy Bridge|0106
+Sandy Bridge|0112
+Sandy Bridge|0116
+Sandy Bridge|0122
+Sandy Bridge|0126
+Sandy Bridge|010A
diff --git a/chip-data/intel/Intel_GMA.html b/chip-data/intel/Intel_GMA.html
new file mode 100644
index 0000000..9e3dd02
--- /dev/null
+++ b/chip-data/intel/Intel_GMA.html
@@ -0,0 +1,1638 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Intel GMA - Wikipedia, the free encyclopedia</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta name="generator" content="MediaWiki 1.17wmf1" />
+<link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Intel_GMA&amp;action=edit" />
+<link rel="edit" title="Edit this page" href="/w/index.php?title=Intel_GMA&amp;action=edit" />
+<link rel="apple-touch-icon" href="http://en.wikipedia.org/apple-touch-icon.png" />
+<link rel="shortcut icon" href="/favicon.ico" />
+<link rel="search" type="application/opensearchdescription+xml" href="/w/opensearch_desc.php" title="Wikipedia (en)" />
+<link rel="EditURI" type="application/rsd+xml" href="http://en.wikipedia.org/w/api.php?action=rsd" />
+<link rel="copyright" href="http://creativecommons.org/licenses/by-sa/3.0/" />
+<link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom" />
+<link rel="stylesheet" href="http://bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&amp;lang=en&amp;modules=mediawiki.legacy.commonPrint%7Cmediawiki.legacy.shared%7Cskins.vector&amp;only=styles&amp;skin=vector" type="text/css" media="all" />
+<style type="text/css" media="all">a.new,#quickbar a.new{color:#ba0000}</style><meta name="ResourceLoaderDynamicStyles" content="" /><link rel="stylesheet" href="http://bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&amp;lang=en&amp;modules=site&amp;only=styles&amp;skin=vector&amp;version=20110217T190952Z" type="text/css" media="all" />
+<link rel="stylesheet" href="http://bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&amp;lang=en&amp;modules=user&amp;only=styles&amp;skin=vector&amp;version=19700101T000001Z" type="text/css" media="all" />
+
+<!--[if lt IE 7]><style type="text/css">body{behavior:url("/w/skins-1.17/vector/csshover.min.htc")}</style><![endif]--></head>
+<body class="mediawiki ltr ns-0 ns-subject page-Intel_GMA skin-vector">
+ <div id="mw-page-base" class="noprint"></div>
+ <div id="mw-head-base" class="noprint"></div>
+ <!-- content -->
+ <div id="content">
+ <a id="top"></a>
+ <div id="mw-js-message" style="display:none;"></div>
+ <!-- sitenotice -->
+ <div id="siteNotice"><!-- centralNotice loads here --><script type="text/javascript">
+/* <![CDATA[ */
+document.writeln("\x3cdiv id=\"localNotice\"\x3e\x3cp\x3e\x3c/p\x3e\n\x3c/div\x3e");
+/* ]]> */
+</script></div>
+ <!-- /sitenotice -->
+ <!-- firstHeading -->
+ <h1 id="firstHeading" class="firstHeading">Intel GMA</h1>
+ <!-- /firstHeading -->
+ <!-- bodyContent -->
+ <div id="bodyContent">
+ <!-- tagline -->
+ <div id="siteSub">From Wikipedia, the free encyclopedia</div>
+ <!-- /tagline -->
+ <!-- subtitle -->
+ <div id="contentSub"></div>
+ <!-- /subtitle -->
+ <!-- jumpto -->
+ <div id="jump-to-nav">
+ Jump to: <a href="#mw-head">navigation</a>,
+ <a href="#p-search">search</a>
+ </div>
+ <!-- /jumpto -->
+ <!-- bodytext -->
+ <div class="thumb tright">
+<div class="thumbinner" style="width:302px;"><a href="/wiki/File:Harumphy.dg965.heatsink.jpg" class="image"><img alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/03/Harumphy.dg965.heatsink.jpg/300px-Harumphy.dg965.heatsink.jpg" width="300" height="400" class="thumbimage" /></a>
+<div class="thumbcaption">
+<div class="magnify"><a href="/wiki/File:Harumphy.dg965.heatsink.jpg" class="internal" title="Enlarge"><img src="http://bits.wikimedia.org/skins-1.17/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>
+GMA X3000 on Intel DG965WHMKR motherboard</div>
+</div>
+</div>
+<p>The <b>Intel Graphics Media Accelerator</b>, or <b>GMA</b>, is <a href="/wiki/Intel" class="mw-redirect" title="Intel">Intel</a>'s current line of integrated <a href="/wiki/Graphics_processor" title="Graphics processor" class="mw-redirect">graphics processors</a> built into various <a href="/wiki/Motherboard">motherboard</a> chipsets.</p>
+<p>These <a href="/wiki/Graphics_processing_unit#Integrated_graphics_solutions" title="Graphics processing unit">integrated graphics</a> products allow a computer to be built without a separate <a href="/wiki/Graphics_card" class="mw-redirect" title="Graphics card">graphics card</a>, which can reduce cost, power consumption and noise. They are commonly found on low-priced notebook and desktop computers as well as business computers, which do not need high levels of graphics capability. 90% of all PCs sold have integrated graphics.<sup id="cite_ref-0" class="reference"><a href="#cite_note-0"><span>[</span>1<span>]</span></a></sup> They rely on the computer's <a href="/wiki/Main_memory" class="mw-redirect" title="Main memory">main memory</a> for storage, which imposes a performance penalty, as both the <a href="/wiki/CPU" class="mw-redirect" title="CPU">CPU</a> and GPU have to access memory over the same <a href="/wiki/Computer_bus" title="Computer bus" class="mw-redirect">bus</a>.</p>
+<table id="toc" class="toc">
+<tr>
+<td>
+<div id="toctitle">
+<h2>Contents</h2>
+</div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#History"><span class="tocnumber">1</span> <span class="toctext">History</span></a></li>
+<li class="toclevel-1 tocsection-2"><a href="#Graphics_cores"><span class="tocnumber">2</span> <span class="toctext">Graphics cores</span></a>
+<ul>
+<li class="toclevel-2 tocsection-3"><a href="#GMA_900"><span class="tocnumber">2.1</span> <span class="toctext">GMA 900</span></a></li>
+<li class="toclevel-2 tocsection-4"><a href="#GMA_950"><span class="tocnumber">2.2</span> <span class="toctext">GMA 950</span></a></li>
+<li class="toclevel-2 tocsection-5"><a href="#GMA_3000"><span class="tocnumber">2.3</span> <span class="toctext">GMA 3000</span></a></li>
+<li class="toclevel-2 tocsection-6"><a href="#GMA_3100"><span class="tocnumber">2.4</span> <span class="toctext">GMA 3100</span></a></li>
+<li class="toclevel-2 tocsection-7"><a href="#GMA_X3000"><span class="tocnumber">2.5</span> <span class="toctext">GMA X3000</span></a></li>
+<li class="toclevel-2 tocsection-8"><a href="#GMA_X3100"><span class="tocnumber">2.6</span> <span class="toctext">GMA X3100</span></a></li>
+<li class="toclevel-2 tocsection-9"><a href="#GMA_X3500"><span class="tocnumber">2.7</span> <span class="toctext">GMA X3500</span></a></li>
+<li class="toclevel-2 tocsection-10"><a href="#GMA_X4500"><span class="tocnumber">2.8</span> <span class="toctext">GMA X4500</span></a></li>
+<li class="toclevel-2 tocsection-11"><a href="#GMA_500"><span class="tocnumber">2.9</span> <span class="toctext">GMA 500</span></a></li>
+<li class="toclevel-2 tocsection-12"><a href="#HD_Graphics_.28GMA_HD.29"><span class="tocnumber">2.10</span> <span class="toctext">HD Graphics (GMA HD)</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-13"><a href="#Specifications"><span class="tocnumber">3</span> <span class="toctext">Specifications</span></a></li>
+<li class="toclevel-1 tocsection-14"><a href="#Software_support"><span class="tocnumber">4</span> <span class="toctext">Software support</span></a>
+<ul>
+<li class="toclevel-2 tocsection-15"><a href="#Mac_OS_X"><span class="tocnumber">4.1</span> <span class="toctext">Mac OS X</span></a></li>
+<li class="toclevel-2 tocsection-16"><a href="#FreeBSD"><span class="tocnumber">4.2</span> <span class="toctext">FreeBSD</span></a></li>
+<li class="toclevel-2 tocsection-17"><a href="#Linux"><span class="tocnumber">4.3</span> <span class="toctext">Linux</span></a>
+<ul>
+<li class="toclevel-3 tocsection-18"><a href="#intel_hal.so"><span class="tocnumber">4.3.1</span> <span class="toctext">intel_hal.so</span></a></li>
+<li class="toclevel-3 tocsection-19"><a href="#GMA_500_on_Linux"><span class="tocnumber">4.3.2</span> <span class="toctext">GMA 500 on Linux</span></a></li>
+</ul>
+</li>
+<li class="toclevel-2 tocsection-20"><a href="#Solaris"><span class="tocnumber">4.4</span> <span class="toctext">Solaris</span></a></li>
+<li class="toclevel-2 tocsection-21"><a href="#Microsoft_Windows"><span class="tocnumber">4.5</span> <span class="toctext">Microsoft Windows</span></a>
+<ul>
+<li class="toclevel-3 tocsection-22"><a href="#GMA_900_on_Windows"><span class="tocnumber">4.5.1</span> <span class="toctext">GMA 900 on Windows</span></a></li>
+<li class="toclevel-3 tocsection-23"><a href="#GMA_950_on_Windows"><span class="tocnumber">4.5.2</span> <span class="toctext">GMA 950 on Windows</span></a></li>
+<li class="toclevel-3 tocsection-24"><a href="#GMA_X3000.2FX3100_on_Windows"><span class="tocnumber">4.5.3</span> <span class="toctext">GMA X3000/X3100 on Windows</span></a></li>
+<li class="toclevel-3 tocsection-25"><a href="#GMA_500_on_Windows"><span class="tocnumber">4.5.4</span> <span class="toctext">GMA 500 on Windows</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-26"><a href="#Modern_gaming"><span class="tocnumber">5</span> <span class="toctext">Modern gaming</span></a></li>
+<li class="toclevel-1 tocsection-27"><a href="#Microsoft_Windows_performance_reviews"><span class="tocnumber">6</span> <span class="toctext">Microsoft Windows performance reviews</span></a>
+<ul>
+<li class="toclevel-2 tocsection-28"><a href="#GMA_X3000_review"><span class="tocnumber">6.1</span> <span class="toctext">GMA X3000 review</span></a></li>
+<li class="toclevel-2 tocsection-29"><a href="#GMA_X3500_review"><span class="tocnumber">6.2</span> <span class="toctext">GMA X3500 review</span></a></li>
+<li class="toclevel-2 tocsection-30"><a href="#GMA_X4500_review"><span class="tocnumber">6.3</span> <span class="toctext">GMA X4500 review</span></a></li>
+<li class="toclevel-2 tocsection-31"><a href="#Sandy_Bridge_IGP"><span class="tocnumber">6.4</span> <span class="toctext">Sandy Bridge IGP</span></a></li>
+</ul>
+</li>
+<li class="toclevel-1 tocsection-32"><a href="#See_also"><span class="tocnumber">7</span> <span class="toctext">See also</span></a></li>
+<li class="toclevel-1 tocsection-33"><a href="#References"><span class="tocnumber">8</span> <span class="toctext">References</span></a></li>
+<li class="toclevel-1 tocsection-34"><a href="#External_links"><span class="tocnumber">9</span> <span class="toctext">External links</span></a></li>
+</ul>
+</td>
+</tr>
+</table>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=1" title="Edit section: History">edit</a>]</span> <span class="mw-headline" id="History">History</span></h2>
+<p>The GMA line of GPUs replaces the earlier "<a href="/w/index.php?title=Intel_Extreme_Graphics&amp;action=edit&amp;redlink=1" class="new" title="Intel Extreme Graphics (page does not exist)">Intel Extreme Graphics</a>", and the <a href="/wiki/Intel740">Intel740</a> line, which were discrete units in the form of <a href="/wiki/Accelerated_Graphics_Port" title="Accelerated Graphics Port">AGP</a> and <a href="/wiki/Conventional_PCI" title="Conventional PCI">PCI</a> cards. Later, Intel integrated the i740 core into the <a href="/wiki/Intel_810">Intel 810</a> chipset.</p>
+<p>The original architecture of GMA systems supported only a few functions in hardware, and relied on the host CPU to handle at least some of the graphics pipeline, further decreasing performance. However, with the introduction of Intel’s 4th generation of GMA architecture (<a href="#GMA_X3000">GMA X3000</a>) in 2006, many of the functions are now built into the hardware, providing an increase in performance. The 4th generation of GMA combines fixed function capabilities with a threaded array of programmable executions units, providing advantages to both graphics and video performance. Many of the advantages of the new GMA architecture come from the ability to flexibly switch as needed between executing graphics-related tasks or video-related tasks. While GMA performance has been widely criticized in the past as being too slow for <a href="/wiki/Computer_games" class="mw-redirect" title="Computer games">computer games</a>, the latest GMA generation should ease many of those concerns for the casual gamer.</p>
+<p>Despite similarities, Intel's main series of GMA IGPs is not based on the <a href="/wiki/PowerVR">PowerVR</a> technology Intel licensed from Imagination Technologies. Intel used the low-power <a href="/wiki/PowerVR#MBX" title="PowerVR">PowerVR MBX</a> designs in chipsets supporting their <a href="/wiki/XScale">XScale</a> platform, and since the sale of XScale in 2006 has licensed the <a href="/wiki/PowerVR#Series_5_.28SGX.29" title="PowerVR">PowerVR SGX</a> and used it in the <a href="#GMA_500">GMA 500</a> IGP for use with their <a href="/wiki/Intel_Atom" title="Intel Atom">Atom</a> platform.</p>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=2" title="Edit section: Graphics cores">edit</a>]</span> <span class="mw-headline" id="Graphics_cores">Graphics cores</span></h2>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=3" title="Edit section: GMA 900">edit</a>]</span> <span class="mw-headline" id="GMA_900">GMA 900</span></h3>
+<p>The GMA 900 was the first graphics core produced under Intel's <i>Graphics Media Accelerator</i> product name, and was incorporated in the <a href="/wiki/List_of_Intel_chipsets#Pentium_M.2FCeleron_M_Mobile_chipsets" title="List of Intel chipsets">Intel 910G, 915G, and 915Gx chipsets</a>.</p>
+<p>The 3D architecture of the GMA&#160;900 was a significant upgrade from the previous <i>Extreme 3D</i> graphics processors. It is a 4 pixel per clock cycle design supporting DirectX 9 pixel <a href="/wiki/Shader" title="Shader">shader model</a> 2.0. It operates at a clock rate ranging from 160 to 333&#160;MHz, depending on the particular chipset. At 333&#160;MHz, it has a peak pixel fill-rate of 1332 megapixels per second. However, the architecture still lacks support for <a href="/wiki/Transform_and_lighting" title="Transform and lighting" class="mw-redirect">hardware transform and lighting</a> and the similar <a href="/wiki/Vertex_shader">vertex shader</a> technologies.</p>
+<p>Like previous Intel integrated graphics parts, the GMA 900 has hardware support for <a href="/wiki/MPEG-2">MPEG-2</a> <a href="/wiki/Motion_compensation">motion compensation</a>, <a href="/wiki/Color_space" title="Color space">color-space</a> conversion and <a href="/wiki/DirectDraw">DirectDraw</a> overlay.</p>
+<p>The processor uses different separate clock generators for display and render cores. The display unit includes a 400&#160;MHz <a href="/wiki/RAMDAC">RAMDAC</a>, 2 25–200&#160;Mpixel/s serial DVO ports, and 2 display controllers. In mobile chipsets, up to 2 18-bit 25–112&#160;MHz <a href="/wiki/LVDS" title="LVDS" class="mw-redirect">LVDS transmitters</a> are included.</p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=4" title="Edit section: GMA 950">edit</a>]</span> <span class="mw-headline" id="GMA_950">GMA 950</span></h3>
+<p>The GMA 950 is Intel's second-generation graphics core, which was also referred by Intel as 'Gen 3.5 Integrated Graphics Engine' in datasheets. It is used in the <a href="/wiki/List_of_Intel_chipsets#Core.2FCore_2_Mobile_chipsets" title="List of Intel chipsets">Intel 940GML, 945G, 945GU and 945GT system chipsets</a>. The amount of video-decoding hardware has increased; VLD, <a href="/wiki/Discrete_cosine_transform" title="Discrete cosine transform">iDCT</a>, and dual <a href="/wiki/Video_overlay">video overlay</a> windows are supposed to be handled in hardware.<sup id="cite_ref-Intel_945G_1-0" class="reference"><a href="#cite_note-Intel_945G-1"><span>[</span>2<span>]</span></a></sup> However in a feature comparison document<sup id="cite_ref-Intel_guide_2-0" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup> it is noted, that VLD and iDCT are not supported until GMA 3100 (on G33 chipsets only). The maximum core clock is up to 400&#160;MHz (on Intel 945G, 945GC, 945GZ, 945GSE), boosting pixel fill-rate to a theoretical 1600 megapixels/s.</p>
+<p>The GMA 950 shares the same architectural weakness as the GMA 900: no hardware geometry processing. Neither basic hardware transform and lighting,<sup id="cite_ref-Xtechgmas_3-0" class="reference"><a href="#cite_note-Xtechgmas-3"><span>[</span>4<span>]</span></a></sup> nor more advanced vertex shaders are handled in the GMA hardware.</p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=5" title="Edit section: GMA 3000">edit</a>]</span> <span class="mw-headline" id="GMA_3000">GMA 3000</span></h3>
+<p>The 946GZ, Q965, and Q963 chipsets use the GMA 3000 chip.<sup id="cite_ref-Intel_946GZ_4-0" class="reference"><a href="#cite_note-Intel_946GZ-4"><span>[</span>5<span>]</span></a></sup><sup id="cite_ref-Intel_2_5-0" class="reference"><a href="#cite_note-Intel_2-5"><span>[</span>6<span>]</span></a></sup> The GMA 3000 3D core is very different from the X3000, despite their similar names. It is based more directly on the previous generation GMA 900 and GMA 950 graphics, and belonging to the same "i915" family with them. It has pixel and vertex shaders which only support Shader Model 2.0b features, and the vertex shaders are still only software-emulated. In addition, hardware video acceleration such as hardware-based iDCT computation, ProcAmp (video stream independent <a href="/wiki/Color_correction">color correction</a>), and VC-1 decoding are not implemented in hardware. Of the GMA 3000-equipped chipsets, only the Q965 retains dual independent display support. The core speed is rated at 400&#160;MHz with 1.6&#160;Gpixel/s fill rate in datasheets, but was listed as 667&#160;MHz core in the white paper.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span>[</span>7<span>]</span></a></sup></p>
+<p>The memory controller can now address a maximum of 256&#160;MB of system memory, and the integrated serial DVO ports have increased top speed to 270Mpixel/s.</p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=6" title="Edit section: GMA 3100">edit</a>]</span> <span class="mw-headline" id="GMA_3100">GMA 3100</span></h3>
+<p>The G31, G33, Q33 and Q35 chipsets use the GMA 3100, which is <a href="/wiki/DirectX">DirectX</a> 9 capable. The 3D core is very similar to the older GMA 3000, including the lack of hardware accelerated vertex shaders.</p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=7" title="Edit section: GMA X3000">edit</a>]</span> <span class="mw-headline" id="GMA_X3000">GMA X3000</span></h3>
+<p>The GMA X3000 for desktop was "substantially redesigned" when compared to previous GMA iterations<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span>[</span>8<span>]</span></a></sup> and it is used in the <a href="/wiki/List_of_Intel_chipsets#Core_2_chipsets" title="List of Intel chipsets">Intel G965</a> north bridge controller.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span>[</span>9<span>]</span></a></sup> The GMA X3000 was launched in July 2006.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span>[</span>10<span>]</span></a></sup> X3000's underlying 3D rendering hardware is organized as a unified shader processor consisting of 8 <a href="/wiki/Scalar_processor" title="Scalar processor">scalar</a> execution units. Each pipeline can process video, vertex, or texture operations. A central scheduler dynamically dispatches threads to pipeline resources, to maximize rendering throughput (and decrease the impact of individual pipeline stalls.) However, due to the scalar nature of the execution units, they can only process data on a single pixel component at a time.<sup id="cite_ref-TRG965_10-0" class="reference"><a href="#cite_note-TRG965-10"><span>[</span>11<span>]</span></a></sup> The GMA X3000 supports DirectX 9.0 with vertex and pixel Shader Model 3.0 features.</p>
+<p>The processor consists of different clock domains, meaning that the entire chip does not operate the same clock speed. This causes some difficulty when measuring peak throughput of its various functions. Further adding to the confusion, it is listed as 667&#160;MHz in Intel G965 white paper, but listed as 400&#160;MHz in Intel G965 datasheet. There are various rules that define the IGP's processing capabilities.<sup id="cite_ref-TRG965_10-1" class="reference"><a href="#cite_note-TRG965-10"><span>[</span>11<span>]</span></a></sup></p>
+<p>Memory controller can now address maximum 384&#160;MB memory according to white paper, but only 256&#160;MB in datasheet.</p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=8" title="Edit section: GMA X3100">edit</a>]</span> <span class="mw-headline" id="GMA_X3100">GMA X3100</span></h3>
+<p>Information: The GMA X3100 is the mobile version of the GMA X3000 used in the Intel GL960/GM965 chipsets and also in the GS965 chipset. The X3100 supports hardware transform and lighting, up to 128 programmable shader units, and up to 384&#160;MB memory. Its display cores can run up to 333&#160;MHz on GM965 and 320&#160;MHz on GL960. Its render cores can run up to 500&#160;MHz on GM965 and 400&#160;MHz on GL960. The X3100 display unit includes a 300&#160;MHz RAMDAC, two 25–112&#160;MHz LVDS transmitters, 2 DVO encoders, and a TV encoder. In addition, the hardware supports DirectX 10.0,<sup id="cite_ref-Intel_guide_2-1" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup> Shader Model 4.0 and OpenGL 1.5.<sup id="cite_ref-Intel_82GM965_GL_Compatibility_11-0" class="reference"><a href="#cite_note-Intel_82GM965_GL_Compatibility-11"><span>[</span>12<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=9" title="Edit section: GMA X3500">edit</a>]</span> <span class="mw-headline" id="GMA_X3500">GMA X3500</span></h3>
+<p>GMA X3500 is an upgrade of the GMA X3000 and used in the desktop <a href="/wiki/G35_(chipset)" title="G35 (chipset)" class="mw-redirect">G35</a>. The shaders support shader model 4.0 features. Architecturally, the GMA X3500 is very similar to the GMA X3000,<sup id="cite_ref-autogenerated1_12-0" class="reference"><a href="#cite_note-autogenerated1-12"><span>[</span>13<span>]</span></a></sup> with both GMAs running at 667&#160;<a href="/wiki/MHz" class="mw-redirect" title="MHz">MHz</a>. The major difference between them is that the GMA X3500 supports <a href="/wiki/Shader_Model" class="mw-redirect" title="Shader Model">Shader Model</a> 4.0 and <a href="/wiki/DirectX_10" class="mw-redirect" title="DirectX 10">DirectX 10</a>, whereas the earlier X3000 supports <a href="/wiki/Shader_Model" class="mw-redirect" title="Shader Model">Shader Model</a> 3.0 and <a href="/wiki/DirectX_9" class="mw-redirect" title="DirectX 9">DirectX 9</a>.<sup id="cite_ref-autogenerated1_12-1" class="reference"><a href="#cite_note-autogenerated1-12"><span>[</span>13<span>]</span></a></sup> The X3500 also adds hardware-assistance for playback of VC-1 video.</p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=10" title="Edit section: GMA X4500">edit</a>]</span> <span class="mw-headline" id="GMA_X4500">GMA X4500</span></h3>
+<p>The GMA X4500 and the GMA X4500HD for desktop<sup id="cite_ref-autogenerated6_13-0" class="reference"><a href="#cite_note-autogenerated6-13"><span>[</span>14<span>]</span></a></sup> were launched in June 2008.<sup id="cite_ref-autogenerated2_14-0" class="reference"><a href="#cite_note-autogenerated2-14"><span>[</span>15<span>]</span></a></sup> The GMA X4500 is used in the <a href="/wiki/List_of_Intel_chipsets#Core_2_chipsets" title="List of Intel chipsets">G43 chipset</a><sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span>[</span>16<span>]</span></a></sup> and the GMA X4500HD is used in the <a href="/wiki/List_of_Intel_chipsets#Core_2_chipsets" title="List of Intel chipsets">G45 chipset</a>.<sup id="cite_ref-autogenerated6_13-1" class="reference"><a href="#cite_note-autogenerated6-13"><span>[</span>14<span>]</span></a></sup> The GMA X4500 is also used in the <a href="/wiki/List_of_Intel_chipsets#Core_2_chipsets" title="List of Intel chipsets">G41 chipset</a>,<sup id="cite_ref-autogenerated3_16-0" class="reference"><a href="#cite_note-autogenerated3-16"><span>[</span>17<span>]</span></a></sup> which was released in September 2008.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span>[</span>18<span>]</span></a></sup></p>
+<p>The GMA 4500MHD for laptops was launched on July 16, 2008. Featurewise, the 4500MHD is identical to its desktop cousin, the X4500HD.<sup class="Template-Fact" title="This claim needs references to reliable sources from July 2008" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed">citation needed</a></i>]</sup> It had been previously rumored that a cost-reduced version, the <i>GMA 4500</i>, was to be launched in late 2008 or early 2009<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span>[</span>19<span>]</span></a></sup> and was to be used in the upcoming <a href="/wiki/List_of_Intel_chipsets#Core_2_chipsets" title="List of Intel chipsets">Q43 and Q45 chipsets</a>.<sup id="cite_ref-autogenerated3_16-1" class="reference"><a href="#cite_note-autogenerated3-16"><span>[</span>17<span>]</span></a></sup> But in practice the Q43 and Q45 Chipsets also use the GMA X4500.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span>[</span>20<span>]</span></a></sup></p>
+<p>The difference between the GMA X4500 and the GMA X4500HD is that the GMA X4500HD is capable of <i>"full <a href="/wiki/1080p">1080p</a> high-definition video playback, including <a href="/wiki/Blu-ray" class="mw-redirect" title="Blu-ray">Blu-ray</a> disc movies"</i>,<sup id="cite_ref-autogenerated6_13-2" class="reference"><a href="#cite_note-autogenerated6-13"><span>[</span>14<span>]</span></a></sup><sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span>[</span>21<span>]</span></a></sup></p>
+<p>Like the X3500, X4500 supports DirectX 10 and Shader Model 4.0 features. Intel designed the GMA X4500 to be 200% faster than the GMA 3100 (<a href="/wiki/List_of_Intel_chipsets#Core_2_chipsets" title="List of Intel chipsets">G33 chipset</a>) in 3DMark06 performance<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span>[</span>22<span>]</span></a></sup> and 70% faster than the GMA X3500 (<a href="/wiki/List_of_Intel_chipsets#Core_2_chipsets" title="List of Intel chipsets">G35 chipset</a>).<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span>[</span>23<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=11" title="Edit section: GMA 500">edit</a>]</span> <span class="mw-headline" id="GMA_500">GMA 500</span></h3>
+<p>The Intel SCH (System Controller Hub; codenamed <b><a href="/wiki/Poulsbo_(chipset)" title="Poulsbo (chipset)" class="mw-redirect">Poulsbo</a></b>) for the Atom processor Z5xx series features a GMA 500 graphic system. Rather than being developed in-house, this core is a <a href="/wiki/PowerVR">PowerVR</a> SGX 535 core licensed from Imagination Technologies.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span>[</span>24<span>]</span></a></sup> Intel describes this as "a flexible, programmable architecture that supports shader-based technology, 2D, 3D and advanced 3D graphics, high-definition video decode, and image processing. Features include screen tiling, internal true color processing, zero overhead anti-aliasing, programmable shader 3D accelerator, and 32-bit floating-point operations."<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span>[</span>25<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=12" title="Edit section: HD Graphics (GMA HD)">edit</a>]</span> <span class="mw-headline" id="HD_Graphics_.28GMA_HD.29">HD Graphics (GMA HD)</span></h3>
+<p>With the introduction of Arrandale-based <a href="/wiki/Intel_Core#Core_i3" title="Intel Core">Core i3</a>, <a href="/wiki/Intel_Core_i5" title="Intel Core i5">Core i5</a>, and <a href="/wiki/Intel_Core_i7" title="Intel Core i7">Core i7</a> processors, graphics cores were now built into the processor package itself. The integrated graphics chips are built on a 45&#160;nm process and are much more power efficient than previous generation GMA cores. The graphics chips on the mobile Arrandale processors include a feature similar to <a href="/wiki/Intel_Turbo_Boost" title="Intel Turbo Boost">Turbo Boost</a> called dynamic frequency scaling, which allows it to gain a little extra headway.</p>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=13" title="Edit section: Specifications">edit</a>]</span> <span class="mw-headline" id="Specifications">Specifications</span></h2>
+<table class="wikitable" style="font-size: 85%; text-align:center">
+<tr>
+<th rowspan="2">Graphics</th>
+<th rowspan="2">Market</th>
+<th rowspan="2"><a href="/wiki/List_of_Intel_chipsets" title="List of Intel chipsets">Chipset</a>/<a href="/wiki/List_of_Intel_microprocessors" title="List of Intel microprocessors">CPU</a></th>
+<th rowspan="2">Code Name</th>
+<th rowspan="2">Device ID</th>
+<th rowspan="2">Core Render<br />
+<a href="/wiki/Clock_rate" title="Clock rate">Clock</a> (<a href="/wiki/Hertz" title="Hertz">MHz</a>)</th>
+<th rowspan="2"><a href="/wiki/Pixel_Pipelines" class="mw-redirect" title="Pixel Pipelines">Pixel Pipelines</a></th>
+<th rowspan="2"><a href="/wiki/Shader">Shader</a> Model<br />
+(<a href="/wiki/Vertex_Shader" title="Vertex Shader" class="mw-redirect">Vertex</a>/<a href="/wiki/Pixel_Shader" title="Pixel Shader" class="mw-redirect">Pixel</a>)</th>
+<th colspan="3"><a href="/wiki/Application_Programming_Interface" title="Application Programming Interface" class="mw-redirect">API</a> Support</th>
+<th rowspan="2"><a href="/wiki/Memory_Bandwidth" class="mw-redirect" title="Memory Bandwidth">Memory Bandwidth</a> (<a href="/wiki/Data_rate_units#Gigabyte_per_second" title="Data rate units">GB/s</a>)</th>
+<th rowspan="2"><a href="/wiki/DVMT">DVMT</a> (<a href="/wiki/Megabyte" title="Megabyte">MB</a>)</th>
+<th colspan="3">Hardware Acceleration</th>
+</tr>
+<tr>
+<th><a href="/wiki/DirectX">DirectX</a></th>
+<th><a href="/wiki/OpenGL">OpenGL</a></th>
+<th><a href="/wiki/OpenCL">OpenCL</a></th>
+<th><a href="/wiki/MPEG-2">MPEG-2</a></th>
+<th><a href="/wiki/VC-1">VC-1</a></th>
+<th><a href="/wiki/H.264/MPEG-4_AVC" title="H.264/MPEG-4 AVC">AVC</a></th>
+</tr>
+<tr>
+<td><a href="/wiki/Intel740">Intel740</a></td>
+<td>Desktop</td>
+<td>stand-alone <a href="/wiki/Graphics_Processing_Unit" title="Graphics Processing Unit" class="mw-redirect">GPU</a></td>
+<td>Auburn</td>
+<td>7800</td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>i752</td>
+<td>Desktop</td>
+<td>i810/i815</td>
+<td>Whitney/Solano</td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/w/index.php?title=Intel_Extreme_Graphics&amp;action=edit&amp;redlink=1" class="new" title="Intel Extreme Graphics (page does not exist)">IEG</a></td>
+<td>Desktop/Mobile</td>
+<td>i830G/i845G</td>
+<td>Brookdale</td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td>IEG2</td>
+<td>Desktop/Mobile</td>
+<td>i852G/i855G/i865G</td>
+<td>Springdale/Morgan Hill/Tulloch/Montara</td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<td rowspan="5">GMA 900</td>
+<td rowspan="4">Desktop</td>
+<td>910GL</td>
+<td rowspan="4">Grantsdale</td>
+<td rowspan="4">2582<br />
+2782</td>
+<td></td>
+<td rowspan="5">4</td>
+<td rowspan="5">2.0 (SW) / 2.0</td>
+<td rowspan="5">7.0</td>
+<td rowspan="9">1.4</td>
+<td rowspan="16">—</td>
+<td rowspan="2">3.2</td>
+<td rowspan="5">128</td>
+<td rowspan="5"><a href="/wiki/Motion_compensation" title="Motion compensation">MC</a><sup id="cite_ref-GMA900Brief_25-0" class="reference"><a href="#cite_note-GMA900Brief-25"><span>[</span>26<span>]</span></a></sup></td>
+<td rowspan="5">No</td>
+<td rowspan="5">No</td>
+</tr>
+<tr>
+<td>915GL</td>
+<td></td>
+</tr>
+<tr>
+<td>915GV</td>
+<td></td>
+<td rowspan="3">8.5</td>
+</tr>
+<tr>
+<td>915G</td>
+<td></td>
+</tr>
+<tr>
+<td>Mobile</td>
+<td>Mobile 915<br />
+Family</td>
+<td>Alviso</td>
+<td>2592<br />
+2792</td>
+<td></td>
+</tr>
+<tr>
+<td rowspan="4">GMA 950</td>
+<td rowspan="3">Desktop</td>
+<td>945GZ</td>
+<td rowspan="3">Lakeport</td>
+<td rowspan="3">2772<br />
+2776</td>
+<td></td>
+<td rowspan="4">4</td>
+<td rowspan="13">3.0 (SW) / 2.0</td>
+<td rowspan="13">9.0c</td>
+<td>8.5</td>
+<td rowspan="4">224<sup id="cite_ref-Intel_guide_2-2" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup></td>
+<td rowspan="4">MC<sup id="cite_ref-Intel_guide_2-3" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup></td>
+<td rowspan="4">No</td>
+<td rowspan="4">No</td>
+</tr>
+<tr>
+<td>945GC</td>
+<td>400</td>
+<td rowspan="3">10.7</td>
+</tr>
+<tr>
+<td>945G</td>
+<td></td>
+</tr>
+<tr>
+<td>Mobile</td>
+<td>Mobile 945<br />
+Family</td>
+<td>Calistoga</td>
+<td>27A2<br />
+27A6<br />
+27AE</td>
+<td>224<sup id="cite_ref-int307508-001_26-0" class="reference"><a href="#cite_note-int307508-001-26"><span>[</span>27<span>]</span></a></sup></td>
+</tr>
+<tr>
+<td rowspan="3">GMA 3000</td>
+<td rowspan="3">Desktop</td>
+<td>946GZ</td>
+<td rowspan="3">Broadwater</td>
+<td>2972<br />
+2973</td>
+<td></td>
+<td rowspan="7">4</td>
+<td rowspan="3">1.4</td>
+<td>10.7</td>
+<td rowspan="3">256</td>
+<td rowspan="3">MC<sup id="cite_ref-Intel_guide_2-4" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup></td>
+<td rowspan="3">No</td>
+<td rowspan="3">No</td>
+</tr>
+<tr>
+<td>Q963</td>
+<td rowspan="2">2992<br />
+2993</td>
+<td rowspan="2"></td>
+<td rowspan="2">12.8</td>
+</tr>
+<tr>
+<td>Q965</td>
+</tr>
+<tr>
+<td rowspan="4">GMA 3100</td>
+<td rowspan="4">Desktop</td>
+<td>Q33</td>
+<td rowspan="4">Bearlake</td>
+<td>29D2<br />
+29D3</td>
+<td></td>
+<td rowspan="4">1.5</td>
+<td rowspan="3">12.8</td>
+<td rowspan="4">256<sup id="cite_ref-G33datasheet_27-0" class="reference"><a href="#cite_note-G33datasheet-27"><span>[</span>28<span>]</span></a></sup></td>
+<td rowspan="3">MC<sup id="cite_ref-Intel_guide_2-5" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup></td>
+<td rowspan="4">No</td>
+<td rowspan="4">No</td>
+</tr>
+<tr>
+<td>Q35</td>
+<td>29B2<br />
+29B3</td>
+<td></td>
+</tr>
+<tr>
+<td>G31</td>
+<td rowspan="2">29C2<br />
+29C3</td>
+<td></td>
+</tr>
+<tr>
+<td>G33</td>
+<td></td>
+<td>12.8 (DDR2)<br />
+17 (DDR3)</td>
+<td>Full<sup id="cite_ref-Intel_guide_2-6" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup></td>
+</tr>
+<tr>
+<td rowspan="2">GMA 3150</td>
+<td>Nettop</td>
+<td>Atom D410<br />
+Atom D510</td>
+<td rowspan="2"><a href="/wiki/Pineview_(microprocessor)" title="Pineview (microprocessor)" class="mw-redirect">Pineview</a></td>
+<td>A001<br />
+A002</td>
+<td>400<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span>[</span>29<span>]</span></a></sup></td>
+<td rowspan="2">2</td>
+<td rowspan="2">1.5 on<br />
+Windows<br />
+2.0 on<br />
+Linux<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span>[</span>30<span>]</span></a></sup></td>
+<td rowspan="2"></td>
+<td>6.4</td>
+<td rowspan="2">384</td>
+<td rowspan="2">Full</td>
+<td rowspan="2">No</td>
+<td rowspan="2">No</td>
+</tr>
+<tr>
+<td>Netbook</td>
+<td>Atom N4x0<br />
+Atom N550</td>
+<td>A011<br />
+A012</td>
+<td>200</td>
+<td>5.3</td>
+</tr>
+<tr>
+<th rowspan="2">Graphics</th>
+<th rowspan="2">Market</th>
+<th rowspan="2"><a href="/wiki/List_of_Intel_chipsets" title="List of Intel chipsets">Chipset</a>/<a href="/wiki/List_of_Intel_microprocessors" title="List of Intel microprocessors">CPU</a></th>
+<th rowspan="2">Code Name</th>
+<th rowspan="2">Device ID</th>
+<th rowspan="2">Core Render<br />
+<a href="/wiki/Clock_rate" title="Clock rate">Clock</a> (<a href="/wiki/Hertz" title="Hertz">MHz</a>)</th>
+<th rowspan="2">Execution Units</th>
+<th rowspan="2"><a href="/wiki/Shader">Shader</a> Model<br />
+(<a href="/wiki/Unified_shader_model" title="Unified shader model">Unified Shader</a>)</th>
+<th colspan="3"><a href="/wiki/Application_Programming_Interface" title="Application Programming Interface" class="mw-redirect">API</a> Support</th>
+<th rowspan="2"><a href="/wiki/Memory_Bandwidth" class="mw-redirect" title="Memory Bandwidth">Memory Bandwidth</a> (<a href="/wiki/Data_rate_units#Gigabyte_per_second" title="Data rate units">GB/s</a>)</th>
+<th rowspan="2"><a href="/wiki/DVMT">DVMT</a>(<a href="/wiki/Megabyte" title="Megabyte">MB</a>)</th>
+<th colspan="3">Hardware Acceleration</th>
+</tr>
+<tr>
+<th><a href="/wiki/DirectX">DirectX</a></th>
+<th><a href="/wiki/OpenGL">OpenGL</a></th>
+<th><a href="/wiki/OpenCL">OpenCL</a></th>
+<th><a href="/wiki/MPEG-2">MPEG-2</a></th>
+<th><a href="/wiki/VC-1">VC-1</a></th>
+<th><a href="/wiki/H.264/MPEG-4_AVC" title="H.264/MPEG-4 AVC">AVC</a></th>
+</tr>
+<tr>
+<td rowspan="3">GMA 500</td>
+<td rowspan="3"><a href="/wiki/Mobile_Internet_Devices" title="Mobile Internet Devices" class="mw-redirect">MID</a></td>
+<td>UL11L</td>
+<td rowspan="3"><a href="/wiki/Poulsbo_(chipset)" title="Poulsbo (chipset)" class="mw-redirect">Poulsbo</a></td>
+<td rowspan="3">8108<br />
+8109</td>
+<td>100</td>
+<td rowspan="3">4</td>
+<td rowspan="3">3.0</td>
+<td rowspan="3">9.0c</td>
+<td rowspan="3">2.0</td>
+<td rowspan="3"></td>
+<td rowspan="3">4.2</td>
+<td rowspan="3">256</td>
+<td rowspan="3">Full</td>
+<td rowspan="3">Full</td>
+<td rowspan="3">Full</td>
+</tr>
+<tr>
+<td>US15L</td>
+<td rowspan="2">200</td>
+</tr>
+<tr>
+<td>US15W</td>
+</tr>
+<tr>
+<td>GMA 600</td>
+<td>MID</td>
+<td>Atom Z6xx</td>
+<td><a href="/wiki/Lincroft_(microprocessor)" title="Lincroft (microprocessor)" class="mw-redirect">Lincroft</a></td>
+<td>4102</td>
+<td>400<sup class="Template-Fact" title="This claim needs references to reliable sources from February 2011" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed">citation needed</a></i>]</sup></td>
+<td>4</td>
+<td>3.0</td>
+<td>9.0c</td>
+<td>2.1</td>
+<td></td>
+<td></td>
+<td></td>
+<td>Full</td>
+<td>Full</td>
+<td>Full</td>
+</tr>
+<tr>
+<th rowspan="2">Graphics</th>
+<th rowspan="2">Market</th>
+<th rowspan="2"><a href="/wiki/List_of_Intel_chipsets" title="List of Intel chipsets">Chipset</a>/<a href="/wiki/List_of_Intel_microprocessors" title="List of Intel microprocessors">CPU</a></th>
+<th rowspan="2">Code Name</th>
+<th rowspan="2">Device ID</th>
+<th rowspan="2">Core Render<br />
+<a href="/wiki/Clock_rate" title="Clock rate">Clock</a> (<a href="/wiki/Hertz" title="Hertz">MHz</a>)</th>
+<th rowspan="2">Execution Units</th>
+<th rowspan="2"><a href="/wiki/Shader">Shader</a> Model<br />
+(<a href="/wiki/Unified_shader_model" title="Unified shader model">Unified Shader</a>)</th>
+<th colspan="3"><a href="/wiki/Application_Programming_Interface" title="Application Programming Interface" class="mw-redirect">API</a> Support</th>
+<th rowspan="2"><a href="/wiki/Memory_Bandwidth" class="mw-redirect" title="Memory Bandwidth">Memory Bandwidth</a> (<a href="/wiki/Data_rate_units#Gigabyte_per_second" title="Data rate units">GB/s</a>)</th>
+<th rowspan="2"><a href="/wiki/DVMT">DVMT</a> (<a href="/wiki/Megabyte" title="Megabyte">MB</a>)</th>
+<th colspan="3">Hardware Acceleration</th>
+</tr>
+<tr>
+<th><a href="/wiki/DirectX">DirectX</a></th>
+<th><a href="/wiki/OpenGL">OpenGL</a></th>
+<th><a href="/wiki/OpenCL">OpenCL</a></th>
+<th><a href="/wiki/MPEG-2">MPEG-2</a></th>
+<th><a href="/wiki/VC-1">VC-1</a></th>
+<th><a href="/wiki/H.264/MPEG-4_AVC" title="H.264/MPEG-4 AVC">AVC</a></th>
+</tr>
+<tr>
+<td>GMA X3000</td>
+<td rowspan="2">Desktop</td>
+<td>G965</td>
+<td>Broadwater</td>
+<td>29A2<br />
+29A3</td>
+<td>667<sup id="cite_ref-Intel_2_5-1" class="reference"><a href="#cite_note-Intel_2-5"><span>[</span>6<span>]</span></a></sup></td>
+<td rowspan="6">8<sup id="cite_ref-Intel_2_5-2" class="reference"><a href="#cite_note-Intel_2-5"><span>[</span>6<span>]</span></a></sup></td>
+<td>3.0</td>
+<td rowspan="1">9.0c</td>
+<td rowspan="2">2.0</td>
+<td rowspan="16">—</td>
+<td rowspan="2">12.8</td>
+<td rowspan="6">384</td>
+<td rowspan="6">Full<sup id="cite_ref-Intel_guide_2-7" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup></td>
+<td>MC + (LF -<br />
+<a href="/wiki/Windows_Media_Video" title="Windows Media Video">WMV9</a> only)</td>
+<td rowspan="6">No</td>
+</tr>
+<tr>
+<td>GMA X3500</td>
+<td>G35</td>
+<td>Broadwater</td>
+<td>2982<br />
+2983</td>
+<td>667<sup id="cite_ref-intel317363_30-0" class="reference"><a href="#cite_note-intel317363-30"><span>[</span>31<span>]</span></a></sup></td>
+<td rowspan="22">4.0</td>
+<td rowspan="22">10</td>
+<td>MC + LF</td>
+</tr>
+<tr>
+<td rowspan="4">GMA X3100</td>
+<td rowspan="4">Mobile</td>
+<td>GL960</td>
+<td rowspan="4">Crestline</td>
+<td rowspan="2">2A02<br />
+2A03</td>
+<td rowspan="2">400<sup id="cite_ref-intel31627303_31-0" class="reference"><a href="#cite_note-intel31627303-31"><span>[</span>32<span>]</span></a></sup></td>
+<td rowspan="21">2.1</td>
+<td rowspan="2">8.5</td>
+<td rowspan="4">MC + (LF -<br />
+<a href="/wiki/Windows_Media_Video" title="Windows Media Video">WMV9</a> only)</td>
+</tr>
+<tr>
+<td>GLE960</td>
+</tr>
+<tr>
+<td>GM965</td>
+<td rowspan="2">2A12<br />
+2A13</td>
+<td rowspan="2">500<sup id="cite_ref-intel31627303_31-1" class="reference"><a href="#cite_note-intel31627303-31"><span>[</span>32<span>]</span></a></sup></td>
+<td rowspan="2">10.7</td>
+</tr>
+<tr>
+<td>GME965</td>
+</tr>
+<tr>
+<td rowspan="3">GMA 4500</td>
+<td rowspan="6">Desktop</td>
+<td>B43</td>
+<td rowspan="6">Eaglelake</td>
+<td>2E42<br />
+2E43<br />
+2E92<br />
+2E93</td>
+<td></td>
+<td rowspan="10">10</td>
+<td rowspan="6">12.8 (DDR2)<br />
+17 (DDR3)<sup id="cite_ref-intel319970_32-0" class="reference"><a href="#cite_note-intel319970-32"><span>[</span>33<span>]</span></a></sup></td>
+<td rowspan="10">1700</td>
+<td rowspan="3"></td>
+<td rowspan="3"></td>
+<td rowspan="3"></td>
+</tr>
+<tr>
+<td>Q43</td>
+<td rowspan="2">2E12<br />
+2E13</td>
+<td rowspan="2"></td>
+</tr>
+<tr>
+<td>Q45</td>
+</tr>
+<tr>
+<td rowspan="2">GMA X4500</td>
+<td>G41</td>
+<td>2E32<br />
+2E33</td>
+<td rowspan="3">800</td>
+<td rowspan="7">Full</td>
+<td rowspan="2">MC + LF</td>
+<td rowspan="2">MC + LF</td>
+</tr>
+<tr>
+<td>G43</td>
+<td rowspan="2">2E22<br />
+2E23</td>
+</tr>
+<tr>
+<td>GMA X4500HD</td>
+<td>G45</td>
+<td rowspan="5">Full</td>
+<td rowspan="5">Full</td>
+</tr>
+<tr>
+<td rowspan="4">GMA 4500MHD</td>
+<td rowspan="4">Mobile</td>
+<td>GL40</td>
+<td rowspan="4">Cantiga</td>
+<td rowspan="4">2A42<br />
+2A43</td>
+<td rowspan="2">400<sup id="cite_ref-intel320122_33-0" class="reference"><a href="#cite_note-intel320122-33"><span>[</span>34<span>]</span></a></sup></td>
+<td rowspan="2">12.8</td>
+</tr>
+<tr>
+<td>GS40</td>
+</tr>
+<tr>
+<td>GM45</td>
+<td rowspan="2">533<sup id="cite_ref-intel320122_33-1" class="reference"><a href="#cite_note-intel320122-33"><span>[</span>34<span>]</span></a></sup></td>
+<td rowspan="2">12.8 (DDR2)<br />
+17 (DDR3)</td>
+</tr>
+<tr>
+<td>GS45</td>
+</tr>
+<tr>
+<td rowspan="7">HD Graphics<br />
+(GMA HD)</td>
+<td rowspan="3">Desktop</td>
+<td>Pentium G6950</td>
+<td rowspan="3">Clarkdale<br />
+GMCH Die:Ironlake</td>
+<td rowspan="3">0042</td>
+<td>533</td>
+<td rowspan="7">12</td>
+<td rowspan="7"></td>
+<td>17</td>
+<td rowspan="7">1720</td>
+<td rowspan="7">Full</td>
+<td rowspan="7">Full</td>
+<td rowspan="7">Full</td>
+</tr>
+<tr>
+<td>Core i3-5x0<br />
+Core i5-6x0</td>
+<td>733</td>
+<td rowspan="2">21.3</td>
+</tr>
+<tr>
+<td>Core i5-661</td>
+<td>900</td>
+</tr>
+<tr>
+<td rowspan="4">Mobile</td>
+<td>Core i5-520UM<br />
+Core i7-620UE<br />
+Core i7-6x0UM</td>
+<td rowspan="4">Arrandale<br />
+GMCH Die:Ironlake</td>
+<td rowspan="4">0046</td>
+<td>500</td>
+<td>12.8</td>
+</tr>
+<tr>
+<td>Core i7-620LE<br />
+Core i7-6x0LM</td>
+<td>566</td>
+<td rowspan="3">17.2</td>
+</tr>
+<tr>
+<td>Core i3-3x0M</td>
+<td>667</td>
+</tr>
+<tr>
+<td>Core i5-430M<br />
+Core i5-520E<br />
+Core i5-5x0M<br />
+Core i7-610E<br />
+Core i7-620M</td>
+<td>766</td>
+</tr>
+<tr>
+<td>HD Graphics 2000</td>
+<td>Desktop</td>
+<td>Non-K edition<br />
+Core i3, Core i5, Core i7</td>
+<td rowspan="3"><a href="/wiki/Sandy_Bridge_(microarchitecture)" title="Sandy Bridge (microarchitecture)" class="mw-redirect">Sandy Bridge</a></td>
+<td rowspan="3">0102 0106 0112 0116 0122 0126 010A</td>
+<td>650–1250 (Turbo)</td>
+<td>6</td>
+<td rowspan="3">4.1</td>
+<td rowspan="3">10.1</td>
+<td rowspan="3">3.0</td>
+<td rowspan="3"></td>
+<td>21.3</td>
+<td rowspan="3">1720</td>
+<td rowspan="3">Full</td>
+<td rowspan="3">Full</td>
+<td rowspan="3">Full</td>
+</tr>
+<tr>
+<td rowspan="2">HD Graphics 3000</td>
+<td>Desktop</td>
+<td>Core i5-2x00K<br />
+Core i7-2x00K</td>
+<td>650–1350 (Turbo)</td>
+<td rowspan="2">12</td>
+<td>21.3</td>
+</tr>
+<tr>
+<td>Mobile</td>
+<td>Core i3, Core i5, Core i7</td>
+<td>350–1300 (Turbo)</td>
+<td>21.3</td>
+</tr>
+<tr>
+<td></td>
+<td></td>
+<td></td>
+<td><a href="/wiki/Ivy_Bridge_(microarchitecture)" title="Ivy Bridge (microarchitecture)" class="mw-redirect">Ivy Bridge</a></td>
+<td>0080</td>
+<td></td>
+<td></td>
+<td>5.0</td>
+<td>11</td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+<tr>
+<th rowspan="2">Graphics</th>
+<th rowspan="2">Market</th>
+<th rowspan="2"><a href="/wiki/List_of_Intel_chipsets" title="List of Intel chipsets">Chipset</a>/<a href="/wiki/List_of_Intel_microprocessors" title="List of Intel microprocessors">CPU</a></th>
+<th rowspan="2">Code Name</th>
+<th rowspan="2">Device ID</th>
+<th rowspan="2">Core Render<br />
+<a href="/wiki/Clock_rate" title="Clock rate">Clock</a> (<a href="/wiki/Hertz" title="Hertz">MHz</a>)</th>
+<th rowspan="2">Execution Units</th>
+<th rowspan="2"><a href="/wiki/Shader">Shader</a> Model<br />
+(<a href="/wiki/Unified_shader_model" title="Unified shader model">Unified Shader</a>)</th>
+<th colspan="3"><a href="/wiki/Application_Programming_Interface" title="Application Programming Interface" class="mw-redirect">API</a> Support</th>
+<th rowspan="2"><a href="/wiki/Memory_Bandwidth" class="mw-redirect" title="Memory Bandwidth">Memory Bandwidth</a> (<a href="/wiki/Data_rate_units#Gigabyte_per_second" title="Data rate units">GB/s</a>)</th>
+<th rowspan="2"><a href="/wiki/DVMT">DVMT</a> (<a href="/wiki/Megabyte" title="Megabyte">MB</a>)</th>
+<th colspan="3">Hardware Acceleration</th>
+</tr>
+<tr>
+<th><a href="/wiki/DirectX">DirectX</a></th>
+<th><a href="/wiki/OpenGL">OpenGL</a></th>
+<th><a href="/wiki/OpenCL">OpenCL</a></th>
+<th><a href="/wiki/MPEG-2">MPEG-2</a></th>
+<th><a href="/wiki/VC-1">VC-1</a></th>
+<th><a href="/wiki/H.264/MPEG-4_AVC" title="H.264/MPEG-4 AVC">AVC</a></th>
+</tr>
+<tr>
+<td>Knights Ferry</td>
+<td>Desktop</td>
+<td>stand-alone <a href="/wiki/Graphics_Processing_Unit" title="Graphics Processing Unit" class="mw-redirect">GPU</a></td>
+<td><a href="/wiki/Larrabee_(microarchitecture)" title="Larrabee (microarchitecture)">Larrabee</a></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+<td></td>
+</tr>
+</table>
+<p>This table is derived from these sources:<sup id="cite_ref-Intel_guide_2-8" class="reference"><a href="#cite_note-Intel_guide-2"><span>[</span>3<span>]</span></a></sup><sup id="cite_ref-Xtechgmas_3-1" class="reference"><a href="#cite_note-Xtechgmas-3"><span>[</span>4<span>]</span></a></sup><sup id="cite_ref-Intel_946GZ_4-1" class="reference"><a href="#cite_note-Intel_946GZ-4"><span>[</span>5<span>]</span></a></sup><sup id="cite_ref-Intel_2_5-3" class="reference"><a href="#cite_note-Intel_2-5"><span>[</span>6<span>]</span></a></sup><sup id="cite_ref-TRG965_10-2" class="reference"><a href="#cite_note-TRG965-10"><span>[</span>11<span>]</span></a></sup><sup id="cite_ref-GMA900Brief_25-1" class="reference"><a href="#cite_note-GMA900Brief-25"><span>[</span>26<span>]</span></a></sup><sup id="cite_ref-G33datasheet_27-1" class="reference"><a href="#cite_note-G33datasheet-27"><span>[</span>28<span>]</span></a></sup><sup id="cite_ref-intel317363_30-1" class="reference"><a href="#cite_note-intel317363-30"><span>[</span>31<span>]</span></a></sup><sup id="cite_ref-intel31627303_31-2" class="reference"><a href="#cite_note-intel31627303-31"><span>[</span>32<span>]</span></a></sup><sup id="cite_ref-intel319970_32-1" class="reference"><a href="#cite_note-intel319970-32"><span>[</span>33<span>]</span></a></sup><sup id="cite_ref-intel320122_33-2" class="reference"><a href="#cite_note-intel320122-33"><span>[</span>34<span>]</span></a></sup><sup id="cite_ref-int30921904_34-0" class="reference"><a href="#cite_note-int30921904-34"><span>[</span>35<span>]</span></a></sup><sup id="cite_ref-946exds_35-0" class="reference"><a href="#cite_note-946exds-35"><span>[</span>36<span>]</span></a></sup><sup id="cite_ref-vrzonegm47_36-0" class="reference"><a href="#cite_note-vrzonegm47-36"><span>[</span>37<span>]</span></a></sup><sup id="cite_ref-Intel910GMLdoc_37-0" class="reference"><a href="#cite_note-Intel910GMLdoc-37"><span>[</span>38<span>]</span></a></sup><sup id="cite_ref-dd915945gm_38-0" class="reference"><a href="#cite_note-dd915945gm-38"><span>[</span>39<span>]</span></a></sup><sup id="cite_ref-intel31760701_39-0" class="reference"><a href="#cite_note-intel31760701-39"><span>[</span>40<span>]</span></a></sup><sup id="cite_ref-GMA900WhitePaper_40-0" class="reference"><a href="#cite_note-GMA900WhitePaper-40"><span>[</span>41<span>]</span></a></sup><sup id="cite_ref-GMA950Brief_41-0" class="reference"><a href="#cite_note-GMA950Brief-41"><span>[</span>42<span>]</span></a></sup><sup id="cite_ref-IntelX4500Dev_42-0" class="reference"><a href="#cite_note-IntelX4500Dev-42"><span>[</span>43<span>]</span></a></sup><sup id="cite_ref-AsusBoard1_43-0" class="reference"><a href="#cite_note-AsusBoard1-43"><span>[</span>44<span>]</span></a></sup><sup id="cite_ref-AsusBoard3_44-0" class="reference"><a href="#cite_note-AsusBoard3-44"><span>[</span>45<span>]</span></a></sup><sup id="cite_ref-AsusBoard2_45-0" class="reference"><a href="#cite_note-AsusBoard2-45"><span>[</span>46<span>]</span></a></sup><sup id="cite_ref-WDDM_46-0" class="reference"><a href="#cite_note-WDDM-46"><span>[</span>47<span>]</span></a></sup><sup id="cite_ref-intelgfxref_47-0" class="reference"><a href="#cite_note-intelgfxref-47"><span>[</span>48<span>]</span></a></sup><sup id="cite_ref-915GMdatasheet_48-0" class="reference"><a href="#cite_note-915GMdatasheet-48"><span>[</span>49<span>]</span></a></sup><sup id="cite_ref-Intel82G965_49-0" class="reference"><a href="#cite_note-Intel82G965-49"><span>[</span>50<span>]</span></a></sup><sup id="cite_ref-IntelSCHdatasheet_50-0" class="reference"><a href="#cite_note-IntelSCHdatasheet-50"><span>[</span>51<span>]</span></a></sup><sup id="cite_ref-IntelSCHspecupd_51-0" class="reference"><a href="#cite_note-IntelSCHspecupd-51"><span>[</span>52<span>]</span></a></sup><sup id="cite_ref-IntelGDC20080221_Graphics_52-0" class="reference"><a href="#cite_note-IntelGDC20080221_Graphics-52"><span>[</span>53<span>]</span></a></sup><sup id="cite_ref-IntelNotesXP14.36.3.4990_53-0" class="reference"><a href="#cite_note-IntelNotesXP14.36.3.4990-53"><span>[</span>54<span>]</span></a></sup><sup id="cite_ref-IntelNotesVista15.11.2_54-0" class="reference"><a href="#cite_note-IntelNotesVista15.11.2-54"><span>[</span>55<span>]</span></a></sup><sup id="cite_ref-IntelXorgOpenGL2.1_55-0" class="reference"><a href="#cite_note-IntelXorgOpenGL2.1-55"><span>[</span>56<span>]</span></a></sup></p>
+<p>Notes:</p>
+<ul>
+<li>VLD: <a href="/wiki/Variable-length_code">Variable-length code</a> (sometimes referred to as slice-level acceleration)</li>
+<li>iDCT: Inverse <a href="/wiki/Discrete_cosine_transform">discrete cosine transform</a></li>
+<li>iMDCT: Inverse <a href="/wiki/Modified_discrete_cosine_transform">modified discrete cosine transform</a></li>
+<li>MC: <a href="/wiki/Motion_compensation">Motion compensation</a></li>
+</ul>
+<ul>
+<li>LF: In-loop <a href="/wiki/Deblocking_filter_(video)" title="Deblocking filter (video)">deblocking filter</a></li>
+<li>WMV9: <a href="/wiki/Windows_Media_Video" title="Windows Media Video">Windows Media Video 9</a> codec</li>
+<li>Full hardware acceleration:
+<ul>
+<li>MPEG-2: VLD, iDCT, and MC</li>
+<li>VC-1: VLD, iMDCT, MC, and LF</li>
+<li>AVC: VLD, iMDCT, MC, and LF</li>
+</ul>
+</li>
+</ul>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=14" title="Edit section: Software support">edit</a>]</span> <span class="mw-headline" id="Software_support">Software support</span></h2>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=15" title="Edit section: Mac OS X">edit</a>]</span> <span class="mw-headline" id="Mac_OS_X">Mac OS X</span></h3>
+<p>Mac OS X 10.4 supports the GMA 950, since it was used in previous revisions of the <a href="/wiki/MacBook">MacBook</a> and 17-inch <a href="/wiki/IMac" title="IMac">iMacs</a>.<sup id="cite_ref-56" class="reference"><a href="#cite_note-56"><span>[</span>57<span>]</span></a></sup> It has been used in all Intel-based Mac minis (until the Mac Mini released on March 3, 2009).<sup id="cite_ref-macmini_57-0" class="reference"><a href="#cite_note-macmini-57"><span>[</span>58<span>]</span></a></sup> Mac OS X 10.5 Leopard contains drivers for the GMA X3100, which were used in a recent revision of the MacBook range.<sup id="cite_ref-58" class="reference"><a href="#cite_note-58"><span>[</span>59<span>]</span></a></sup></p>
+<p>Late-release versions of Mac OS X 10.4 also support the GMA 900 due to its use in the Apple Developer Transition Kit, which was used in the PowerPC-to-Intel transition. However, special modifications to the <a href="/wiki/Kext" class="mw-redirect" title="Kext">kext</a> file must be made to enable Core Image and Quartz Extreme.</p>
+<p>Although the new MacBook line no longer uses the X3100, Mac OS X 10.5 (Leopard) ships with drivers supporting it that require no modifications to the <a href="/wiki/Kext" class="mw-redirect" title="Kext">kext</a> file. Mac OS X 10.6 (Snow Leopard), which includes a new 64-bit kernel in addition to the 32-bit one, does not include 64-bit X3100 drivers.<sup class="Template-Fact" title="This claim needs references to reliable sources from November 2009" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed">citation needed</a></i>]</sup> This means that although the MacBooks with the X3100 have 64-bit capable processors and EFI, Mac OS X must load the 32-bit kernel to support the 32-bit X3100 drivers.<sup class="Template-Fact" title="This claim needs references to reliable sources from November 2009" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed">citation needed</a></i>]</sup> November 9's 10.6.2 update ships with 64-bit X3100 drivers.<sup class="Template-Fact" title="This claim needs references to reliable sources from November 2009" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed">citation needed</a></i>]</sup></p>
+<p>For a while MacBook and MacBook Pro notebooks instead shipped with a far more powerful<sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span>[</span>60<span>]</span></a></sup> NVIDIA GeForce 9400M,<sup id="cite_ref-60" class="reference"><a href="#cite_note-60"><span>[</span>61<span>]</span></a></sup> and the 15" and 17" MacBook Pro notebooks shipped with an additional GeForce 9600GT supporting hybrid power to switch between GPUs. The NVIDIA GeForce 9400M chipset implemented in Apple Macbooks did not support composite or S-video output.<sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span>[</span>62<span>]</span></a></sup></p>
+<p>Current (Mid 2010) Macbook Pro Models have an on-board Intel HD (GMA HD) graphics chip as well as a discrete Nvidia 300M series card that supports hybrid power to switch the output.<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span>[</span>63<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=16" title="Edit section: FreeBSD">edit</a>]</span> <span class="mw-headline" id="FreeBSD">FreeBSD</span></h3>
+<p>FreeBSD 8.0 supports the following Intel graphic chipsets: G945/GME945/G965/Q965/GM965/GL960/GME965/G31/G33/Q33/Q35/G35/G41/G43/G45/Q43/Q45.<sup class="Template-Fact" title="This claim needs references to reliable sources from February 2010" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed">citation needed</a></i>]</sup> GMA3150, to date, is unsupported by version 2.7 of the driver which ships with FreeBSD 8.0, 8.1RCs, and 9.0.</p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=17" title="Edit section: Linux">edit</a>]</span> <span class="mw-headline" id="Linux">Linux</span></h3>
+<p>Intel has had a long history of producing or commissioning open source drivers for its graphics chips, with all chipsets (except the GMA&#160;500) dating back to the i810 having open 2D and 3D drivers for Linux. Intel is the only major graphics hardware vendor to do so. (For an analysis by company see <a href="/wiki/Graphics_hardware_and_FOSS">Graphics hardware and FOSS</a>.)</p>
+<p>In August 2006, Intel added support to the open-source <a href="/wiki/X.Org">X.Org</a>/<a href="/wiki/XFree86">XFree86</a> drivers for the latest 965 series that include the GMA (X)3000 core.<sup id="cite_ref-63" class="reference"><a href="#cite_note-63"><span>[</span>64<span>]</span></a></sup> These drivers were developed for Intel by <a href="/w/index.php?title=Tungsten_Graphics&amp;action=edit&amp;redlink=1" class="new" title="Tungsten Graphics (page does not exist)">Tungsten Graphics</a>.<sup id="cite_ref-64" class="reference"><a href="#cite_note-64"><span>[</span>65<span>]</span></a></sup></p>
+<p>In May 2007, version 2.0 of the driver (xorg-video-intel) was released, which added support for the 965GM chipset. In addition, the 2.0 driver added native video mode programming support for all chipsets from i830 forward. This version added support for automatic video mode detection and selection, monitor hot plug, dynamic extended and merged desktops and per-monitor screen rotation. These features are built in to the X.Org 7.3 X server release and will eventually be supported across most of the open source X.Org video drivers.<sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span>[</span>66<span>]</span></a></sup> Version 2.1, released in July 2007, added support for the G33, Q33 and Q35 chipsets.<sup id="cite_ref-66" class="reference"><a href="#cite_note-66"><span>[</span>67<span>]</span></a></sup> G35 is also supported by the Linux driver.<sup id="cite_ref-67" class="reference"><a href="#cite_note-67"><span>[</span>68<span>]</span></a></sup></p>
+<p>As is common for X.Org drivers on Linux, the license is a combination of <a href="/wiki/GNU_General_Public_License" title="GNU General Public License">GPL</a> (for the Linux kernel parts) and <a href="/wiki/MIT_License" title="MIT License">MIT</a> (for all other parts).<sup id="cite_ref-68" class="reference"><a href="#cite_note-68"><span>[</span>69<span>]</span></a></sup></p>
+<p>The drivers were mainly developed by Intel and Tungsten Graphics (under contract) since the chipsets' documentation were not publicly available for a long time. In January 2008, Intel released the complete developer documentation for their, at the time, latest chipsets (965 and G35 chipset), allowing for further external developers’ involvement.<sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span>[</span>70<span>]</span></a></sup><sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span>[</span>71<span>]</span></a></sup> In April 2009, Intel released documentation for their newer G45 graphics (including X4500) chipsets.<sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span>[</span>72<span>]</span></a></sup> In May 2009, Intel employee Eric Anholt stated Intel was "still working on getting docs for [8xx] chipsets out."<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span>[</span>73<span>]</span></a></sup></p>
+<h4><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=18" title="Edit section: intel hal.so">edit</a>]</span> <span class="mw-headline" id="intel_hal.so">intel_hal.so</span></h4>
+<p>The driver source contains references to a currently-unavailable binary named "intel_hal.so". It is entirely optional, and the advantages are not clear; ostensibly they are increased performance and/or additional features. References in the open source code indicate that it contains or contained (at least) <a href="/wiki/Macrovision#Macrovision_for_video" class="mw-redirect" title="Macrovision">Macrovision</a> support and some minor, optional 3D optimization routines. Calls to the Macrovision code inside the binary were later removed from the 2D driver.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span>[</span>74<span>]</span></a></sup><sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span>[</span>75<span>]</span></a></sup></p>
+<h4><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=19" title="Edit section: GMA 500 on Linux">edit</a>]</span> <span class="mw-headline" id="GMA_500_on_Linux">GMA 500 on Linux</span></h4>
+<p>GMA 500 support on Linux is not optimal. The driver is developed by Tungsten Graphics, not by Intel, and the graphic core is not an Intel one, but is licensed from PowerVR. This has led to an uncertain mix of open and closed source 3d accelerated drivers, instability and lack of support.</p>
+<p>Ubuntu is the Linux distribution that best supports GMA500 (Poulsbo), through the use of the ubuntu-mobile and gma500 repositories on <a href="/wiki/Launchpad_(website)" title="Launchpad (website)">Launchpad</a>. Support is present for 8.04, 8.10, 9.04, 9.10 and in an experimental way for 10.04 and 10.10, but the installation procedure is not as simple as other drivers and can lead to many bugs.<sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span>[</span>76<span>]</span></a></sup></p>
+<p><a href="/wiki/Jolicloud">Jolicloud</a>, a Linux based OS optimized for netbooks, has a driver for the GMA500 built in.</p>
+<p><a href="http://www.pixielive.org" class="external text" rel="nofollow">PixieLive</a>, a GNU/Linux live distribution optimized for GMA500 netbooks, it can boot from USB Pendrive, SD Card or HardDisk.</p>
+<p>Intel releases official Linux drivers through the IEGD (Intel Embedded Graphic Driver) supporting some Linux distributions dedicated to the embedded market.</p>
+<p>GMA500 is capable of running well in Ubuntu 9.10 with Compiz visual effects activated.<sup id="cite_ref-76" class="reference"><a href="#cite_note-76"><span>[</span>77<span>]</span></a></sup></p>
+<p>In November 2009, the <a href="/wiki/Linux_Foundation">Linux Foundation</a> released the details of a new, rewritten Linux driver that would support this chipset and Intel's other upcoming chipsets. The <a href="/wiki/Direct_Rendering_Manager">Direct Rendering Manager</a> and <a href="/wiki/X.Org_Server" title="X.Org Server">X.org</a> parts would be free software, but the 3D component (using <a href="/wiki/Gallium3D">Gallium3D</a>) will still be proprietary.<sup id="cite_ref-77" class="reference"><a href="#cite_note-77"><span>[</span>78<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=20" title="Edit section: Solaris">edit</a>]</span> <span class="mw-headline" id="Solaris">Solaris</span></h3>
+<p>Solaris may possibly have support for these chipsets.<sup class="noprint Inline-Template" title="The material in the vicinity of this tag may be based upon unreliable original research from September 2009" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:No_original_research" title="Wikipedia:No original research">original research?</a></i>]</sup> Scant information can be found on the Opensolaris DRI page.<sup id="cite_ref-78" class="reference"><a href="#cite_note-78"><span>[</span>79<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=21" title="Edit section: Microsoft Windows">edit</a>]</span> <span class="mw-headline" id="Microsoft_Windows">Microsoft Windows</span></h3>
+<h4><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=22" title="Edit section: GMA 900 on Windows">edit</a>]</span> <span class="mw-headline" id="GMA_900_on_Windows">GMA 900 on Windows</span></h4>
+<p>The GMA 900 is theoretically capable of running Windows Vista’s <a href="/wiki/Windows_Aero" title="Windows Aero">Aero</a> interface and is certified as DirectX 9 compliant. However, no WHQL certified WDDM driver has been made available. Presumably this is due to the lack of a "hardware scheduler" in the GPU.<sup id="cite_ref-79" class="reference"><a href="#cite_note-79"><span>[</span>80<span>]</span></a></sup></p>
+<p>Many owners of GMA900 hardware believed they would be able to run Aero on their systems as early release candidates of Vista permitted XDDM drivers to run Aero. Intel, however, contends that Microsoft's final specs for Aero/WDDM certification did not permit releasing a WDDM driver for GMA900 (due to issues with the hardware scheduler, as mentioned above), so when the final version of Vista was released, no WDDM driver was released.<sup id="cite_ref-80" class="reference"><a href="#cite_note-80"><span>[</span>81<span>]</span></a></sup> The last minute pulling of OpenGL capabilities from the GMA drivers for Windows Vista left a large number of GMA based workstations unable to perform basic 3D hardware acceleration with OpenGL and unable to run many Vista Premium applications such as <a href="/wiki/Windows_DVD_Maker">Windows DVD Maker</a>. To get OpenGL acceleration, users must use third party drivers, like the freeware <a href="http://TitaniumGL.tk" class="external text" rel="nofollow">TitaniumGL</a>.</p>
+<h4><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=23" title="Edit section: GMA 950 on Windows">edit</a>]</span> <span class="mw-headline" id="GMA_950_on_Windows">GMA 950 on Windows</span></h4>
+<p>This IGP is capable of displaying the <a href="/wiki/Windows_Aero" title="Windows Aero">Aero</a> interface for <a href="/wiki/Windows_Vista">Windows Vista</a>. Drivers have shipped with Windows Vista since beta versions were made available in mid-2006. It can also run <a href="/wiki/Windows_7">Windows 7</a>'s Aero interface since Intel released drivers for Windows 7 in mid-June 2009.</p>
+<p>The GMA 950 is integrated into many <a href="/wiki/Netbook" title="Netbook">netbooks</a>, such as the <a href="/wiki/Acer_Aspire_One">Acer Aspire One</a>, and is able to display a resolution up to 2048×1536 at 75&#160;Hz and up to 224 MB of video memory.<sup id="cite_ref-81" class="reference"><a href="#cite_note-81"><span>[</span>82<span>]</span></a></sup></p>
+<p>Most of the reviews about this IGP were negative, since many games (such as <i><a href="/wiki/Splinter_Cell:_Chaos_Theory" class="mw-redirect" title="Splinter Cell: Chaos Theory">Splinter Cell: Chaos Theory</a></i> or <i><a href="/wiki/The_Elder_Scrolls_IV:_Oblivion" title="The Elder Scrolls IV: Oblivion">Oblivion</a></i>) need both Pixel Shader 2.0 or higher, which the GMA supports, and Vertex Shader 2.0, which is not supported in hardware on the GMA and is software-driven. Other games such as <i><a href="/wiki/Crysis">Crysis</a></i> will run but may not work at frame rates fast enough to make the game playable.</p>
+<h4><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=24" title="Edit section: GMA X3000/X3100 on Windows">edit</a>]</span> <span class="mw-headline" id="GMA_X3000.2FX3100_on_Windows">GMA X3000/X3100 on Windows</span></h4>
+<p>T&amp;L and Vertex Shaders 3.0 are supported by Intel's newest 15.6 drivers for Windows Vista as of September 2, 2007. XP support for VS3 and T&amp;L was introduced on August 10, 2007. Intel announced in March 2007 that beta drivers would be available in June 2007.<sup id="cite_ref-82" class="reference"><a href="#cite_note-82"><span>[</span>83<span>]</span></a></sup><sup id="cite_ref-83" class="reference"><a href="#cite_note-83"><span>[</span>84<span>]</span></a></sup> On June 1, 2007 "pre-beta" (or Early Beta) drivers were released for Windows XP (but not for Vista).<sup id="cite_ref-84" class="reference"><a href="#cite_note-84"><span>[</span>85<span>]</span></a></sup> Beta drivers for Vista and XP were released on June 19.<sup id="cite_ref-85" class="reference"><a href="#cite_note-85"><span>[</span>86<span>]</span></a></sup> Since hardware T&amp;L and vertex shading has been enabled in drivers individual applications can be forced to fall back to software rendering,<sup id="cite_ref-86" class="reference"><a href="#cite_note-86"><span>[</span>87<span>]</span></a></sup> which raises performance and compatibility in certain cases. Selection is based on testing by Intel and preselected in the driver .inf file.</p>
+<p>Intel has released production version drivers for <a href="http://downloadfinder.intel.com/scripts-df-external/Detail_Desc.aspx?agr=N&amp;ProductID=2576&amp;DwnldID=12415&amp;strOSs=163&amp;OSFullName=Windows%20Vista*&amp;lang=eng" class="external text" rel="nofollow">32-bit</a> and <a href="http://downloadfinder.intel.com/scripts-df-external/Detail_Desc.aspx?agr=N&amp;ProductID=2576&amp;DwnldID=12417&amp;strOSs=150&amp;OSFullName=Windows%20Vista*%2064&amp;lang=eng" class="external text" rel="nofollow">64-bit</a> <a href="/wiki/Windows_Vista">Windows Vista</a> that enable the <a href="/wiki/Windows_Aero" title="Windows Aero">Aero</a> graphics. Intel introduced <a href="/wiki/Direct_X" class="mw-redirect" title="Direct X">Direct X</a> 10 for the X3100 and X3500 GPUs in the Vista 15.9 drivers, though any release of DX10 drivers for the X3000 is uncertain. <a href="/wiki/Windows_Display_Driver_Model" title="Windows Display Driver Model">WDDM</a> 1.1 is supported by X3100 but <a href="/wiki/DirectX_Video_Acceleration" title="DirectX Video Acceleration">DXVA-HD</a> is not.</p>
+<p>OpenGL 2.0 support is available since Vista 15.11 drivers<sup id="cite_ref-87" class="reference"><a href="#cite_note-87"><span>[</span>88<span>]</span></a></sup> and XP 14.36 drivers.<sup id="cite_ref-88" class="reference"><a href="#cite_note-88"><span>[</span>89<span>]</span></a></sup></p>
+<h4><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=25" title="Edit section: GMA 500 on Windows">edit</a>]</span> <span class="mw-headline" id="GMA_500_on_Windows">GMA 500 on Windows</span></h4>
+<p>As of September 2010, the latest available driver revisions from the Intel website for Windows XP, Vista and 7 are:<sup id="cite_ref-89" class="reference"><a href="#cite_note-89"><span>[</span>90<span>]</span></a></sup></p>
+<ul>
+<li>Version 3.3.0 for Windows XP.</li>
+<li>Version 4.0.2 for Windows Vista.</li>
+<li>Version 5.0.0.2030 for Windows 7.</li>
+</ul>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=26" title="Edit section: Modern gaming">edit</a>]</span> <span class="mw-headline" id="Modern_gaming">Modern gaming</span></h2>
+<p>The performance and functionality of GMA processors are limited relative to discrete GPUs. Some features of games and other 3D applications may be unsupported by GMAs, particularly older ones. The GMA X3x00's unified shader design allows for more complete hardware functionality, but the line still has issues with some games and has significantly limited performance.<sup id="cite_ref-90" class="reference"><a href="#cite_note-90"><span>[</span>91<span>]</span></a></sup></p>
+<p>Intel has put up a page with 'Known Issues &amp; Solutions' for each version.<sup id="cite_ref-91" class="reference"><a href="#cite_note-91"><span>[</span>92<span>]</span></a></sup> For Intel Graphics Media Accelerator Software Development concerns, there is the Integrated Graphics Software Development Forum.<sup id="cite_ref-92" class="reference"><a href="#cite_note-92"><span>[</span>93<span>]</span></a></sup></p>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=27" title="Edit section: Microsoft Windows performance reviews">edit</a>]</span> <span class="mw-headline" id="Microsoft_Windows_performance_reviews">Microsoft Windows performance reviews</span></h2>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=28" title="Edit section: GMA X3000 review">edit</a>]</span> <span class="mw-headline" id="GMA_X3000_review">GMA X3000 review</span></h3>
+<p>A review conducted in April 2007 by <a href="/wiki/The_Tech_Report">The Tech Report</a> determined that the GMA X3000 had performance comparable to the <a href="/wiki/Comparison_of_Nvidia_graphics_processing_units#GeForce_6_series" title="Comparison of Nvidia graphics processing units">Nvidia GeForce 6150</a>.<sup id="cite_ref-autogenerated5_93-0" class="reference"><a href="#cite_note-autogenerated5-93"><span>[</span>94<span>]</span></a></sup> During that review the GMA X3000 was unable to run the <a href="/wiki/PC_games" class="mw-redirect" title="PC games">PC games</a> <a href="/wiki/Battlefield_2">Battlefield 2</a> and <a href="/wiki/The_Elder_Scrolls_IV:_Oblivion" title="The Elder Scrolls IV: Oblivion">Oblivion</a>.<sup id="cite_ref-94" class="reference"><a href="#cite_note-94"><span>[</span>95<span>]</span></a></sup> However, the <a href="/wiki/ExtremeTech">ExtremeTech</a> review found that games which aren't as graphically demanding, such as <a href="/wiki/Sims_2" class="mw-redirect" title="Sims 2">Sims 2</a> and <a href="/wiki/Civilization_4" class="mw-redirect" title="Civilization 4">Civilization 4</a>, "look good" when the GMA X3000 is used to run them.<sup id="cite_ref-95" class="reference"><a href="#cite_note-95"><span>[</span>96<span>]</span></a></sup></p>
+<p>Reviews performed by The Tech Report, by <a href="/wiki/ExtremeTech">ExtremeTech</a> and by <a href="/wiki/Anandtech" class="mw-redirect" title="Anandtech">Anandtech</a> all concluded that the <a href="/wiki/AMD" class="mw-redirect" title="AMD">AMD</a>'s <a href="/wiki/AMD_690G#690G" title="AMD 690G" class="mw-redirect">Radeon X1250</a> <a href="/wiki/Integrated_graphics#Integrated_graphics_solutions" title="Integrated graphics" class="mw-redirect">integrated graphics solutions</a> based on the <a href="/wiki/AMD_690G" class="mw-redirect" title="AMD 690G">AMD 690G</a> chipset was a better choice than the GMA X3000 based on the G965 chipset, especially when considering 3D gaming performance and price.<sup id="cite_ref-autogenerated5_93-1" class="reference"><a href="#cite_note-autogenerated5-93"><span>[</span>94<span>]</span></a></sup><sup id="cite_ref-96" class="reference"><a href="#cite_note-96"><span>[</span>97<span>]</span></a></sup><sup id="cite_ref-97" class="reference"><a href="#cite_note-97"><span>[</span>98<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=29" title="Edit section: GMA X3500 review">edit</a>]</span> <span class="mw-headline" id="GMA_X3500_review">GMA X3500 review</span></h3>
+<p>In a review performed by Register Hardware in December 2007,<sup id="cite_ref-autogenerated1_12-2" class="reference"><a href="#cite_note-autogenerated1-12"><span>[</span>13<span>]</span></a></sup> author Leo Waldock argued that because the GMA X3500 is not capable of running any <a href="/wiki/PC_game" class="mw-redirect" title="PC game">PC game</a> that requires <a href="/wiki/DirectX_10" class="mw-redirect" title="DirectX 10">DirectX 10</a>, the addition of <a href="/wiki/DirectX_10" class="mw-redirect" title="DirectX 10">DirectX 10</a> support to the GMA X3500 was "irrelevant".<sup id="cite_ref-autogenerated4_98-0" class="reference"><a href="#cite_note-autogenerated4-98"><span>[</span>99<span>]</span></a></sup> During that same review, the GMA X3500 was used to run the <a href="/wiki/PC_game" title="PC game" class="mw-redirect">PC games</a> <a href="/wiki/Crysis">Crysis</a> and <a href="/wiki/FEAR_Extraction_Point" class="mw-redirect" title="FEAR Extraction Point">FEAR Extraction Point</a>, where it was able to render only 4 and 14 <a href="/wiki/Frames_per_second" class="mw-redirect" title="Frames per second">frames per second</a> respectively for each game.<sup id="cite_ref-99" class="reference"><a href="#cite_note-99"><span>[</span>100<span>]</span></a></sup> In the end the review concluded that overall the X3500 made "minimal advances" over the GMA X3000.<sup id="cite_ref-autogenerated4_98-1" class="reference"><a href="#cite_note-autogenerated4-98"><span>[</span>99<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=30" title="Edit section: GMA X4500 review">edit</a>]</span> <span class="mw-headline" id="GMA_X4500_review">GMA X4500 review</span></h3>
+<p>In a review published in May 2008, the GMA X4500 showed a superior game performance to the lowest-end 1-year-older <a href="/wiki/Comparison_of_Nvidia_graphics_processing_units#GeForce_8_series" title="Comparison of Nvidia graphics processing units">GeForce 8400M</a> <a href="/wiki/Graphics_card" class="mw-redirect" title="Graphics card">graphics card</a> in some CPU-bound tests, while losing to the still low-end <a href="/wiki/Comparison_of_Nvidia_graphics_processing_units#GeForce_8M_series" title="Comparison of Nvidia graphics processing units">GeForce 8400M GS</a> with a slower CPU.<sup id="cite_ref-100" class="reference"><a href="#cite_note-100"><span>[</span>101<span>]</span></a></sup></p>
+<h3><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=31" title="Edit section: Sandy Bridge IGP">edit</a>]</span> <span class="mw-headline" id="Sandy_Bridge_IGP">Sandy Bridge IGP</span></h3>
+<p>In a review released by Anandtech in August 2010, the as-yet unnamed IGP in the upcoming Sandy Bridge CPUs was over two times faster than the previous GMA HD part, beating the ATI Radeon 5450 in some tests.<sup id="cite_ref-101" class="reference"><a href="#cite_note-101"><span>[</span>102<span>]</span></a></sup></p>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=32" title="Edit section: See also">edit</a>]</span> <span class="mw-headline" id="See_also">See also</span></h2>
+<ul>
+<li><a href="/wiki/Graphics_hardware_and_FOSS">Graphics hardware and FOSS</a></li>
+<li><a href="/wiki/Larrabee_(microarchitecture)" title="Larrabee (microarchitecture)">Larrabee</a></li>
+<li><a href="/wiki/Comparison_of_AMD_graphics_processing_units">Comparison of AMD graphics processing units</a></li>
+<li><a href="/wiki/Comparison_of_Nvidia_graphics_processing_units">Comparison of Nvidia graphics processing units</a></li>
+</ul>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=33" title="Edit section: References">edit</a>]</span> <span class="mw-headline" id="References">References</span></h2>
+<div class="reflist references-column-count references-column-count-2" style="column-count: 2; -moz-column-count: 2; -webkit-column-count: 2;">
+<div class="references">
+<ol>
+<li id="cite_note-0"><b><a href="#cite_ref-0">^</a></b> <span class="citation web">Key, Gary (2007-03-16). <a href="http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2948&amp;p=1" class="external text" rel="nofollow">"Intel G965: microATX Performance Update"</a>. <i>AnandTech</i><span class="printonly">. <a href="http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2948&amp;p=1" class="external free" rel="nofollow">http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2948&amp;p=1</a></span><span class="reference-accessdate">. Retrieved 2008-07-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G965%3A+microATX+Performance+Update&amp;rft.atitle=AnandTech&amp;rft.aulast=Key&amp;rft.aufirst=Gary&amp;rft.au=Key%2C%26%2332%3BGary&amp;rft.date=2007-03-16&amp;rft_id=http%3A%2F%2Fwww.anandtech.com%2Fcpuchipsets%2Fshowdoc.aspx%3Fi%3D2948%26p%3D1&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-Intel_945G-1"><b><a href="#cite_ref-Intel_945G_1-0">^</a></b> <span class="citation web"><a href="http://www.intel.com/Assets/PDF/datasheet/307502.pdf" class="external text" rel="nofollow">"Intel 945G/945GZ/945GC/ 945P/945PL Express Chipset Family - Datasheet"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/Assets/PDF/datasheet/307502.pdf" class="external free" rel="nofollow">http://www.intel.com/Assets/PDF/datasheet/307502.pdf</a></span><span class="reference-accessdate">. Retrieved 2010-05-27</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+945G%2F945GZ%2F945GC%2F+945P%2F945PL+Express+Chipset+Family+-+Datasheet&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2FAssets%2FPDF%2Fdatasheet%2F307502.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-Intel_guide-2">^ <a href="#cite_ref-Intel_guide_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Intel_guide_2-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Intel_guide_2-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-Intel_guide_2-3"><sup><i><b>d</b></i></sup></a> <a href="#cite_ref-Intel_guide_2-4"><sup><i><b>e</b></i></sup></a> <a href="#cite_ref-Intel_guide_2-5"><sup><i><b>f</b></i></sup></a> <a href="#cite_ref-Intel_guide_2-6"><sup><i><b>g</b></i></sup></a> <a href="#cite_ref-Intel_guide_2-7"><sup><i><b>h</b></i></sup></a> <a href="#cite_ref-Intel_guide_2-8"><sup><i><b>i</b></i></sup></a> <span class="citation web"><a href="http://download.intel.com/products/graphics/intel_graphics_guide.pdf" class="external text" rel="nofollow">"Intel Graphics&#160;— Built for mainstream Desktop and Mobile PC Users"</a> (PDF)<span class="printonly">. <a href="http://download.intel.com/products/graphics/intel_graphics_guide.pdf" class="external free" rel="nofollow">http://download.intel.com/products/graphics/intel_graphics_guide.pdf</a></span><span class="reference-accessdate">. Retrieved 2007-06-08</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+Graphics%26nbsp%3B%E2%80%94+Built+for+mainstream+Desktop+and+Mobile+PC+Users&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdownload.intel.com%2Fproducts%2Fgraphics%2Fintel_graphics_guide.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-Xtechgmas-3">^ <a href="#cite_ref-Xtechgmas_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Xtechgmas_3-1"><sup><i><b>b</b></i></sup></a> Case, Loyd. <a href="http://www.extremetech.com/article2/0,1697,1821808,00.asp" class="external text" rel="nofollow">Intel GMA950 Integrated Graphics Core</a>, Extremetech, May 31, 2005.</li>
+<li id="cite_note-Intel_946GZ-4">^ <a href="#cite_ref-Intel_946GZ_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Intel_946GZ_4-1"><sup><i><b>b</b></i></sup></a> <span class="citation web"><a href="http://www.intel.com/products/chipsets/946PL_946GZ/prodbrief.pdf" class="external text" rel="nofollow">"Product brief: The Intel 946GZ Express Chipset"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/products/chipsets/946PL_946GZ/prodbrief.pdf" class="external free" rel="nofollow">http://www.intel.com/products/chipsets/946PL_946GZ/prodbrief.pdf</a></span><span class="reference-accessdate">. Retrieved 2007-06-28</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Product+brief%3A+The+Intel+946GZ+Express+Chipset&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fproducts%2Fchipsets%2F946PL_946GZ%2Fprodbrief.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-Intel_2-5">^ <a href="#cite_ref-Intel_2_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Intel_2_5-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Intel_2_5-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-Intel_2_5-3"><sup><i><b>d</b></i></sup></a> <span class="citation web"><a href="http://www.intel.com/products/chipsets/gma3000/gma3000.pdf" class="external text" rel="nofollow">"Intel’s Next Generation Integrated Graphics Architecture&#160;– Intel Graphics Media Accelerator X3000 and 3000"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/products/chipsets/gma3000/gma3000.pdf" class="external free" rel="nofollow">http://www.intel.com/products/chipsets/gma3000/gma3000.pdf</a></span><span class="reference-accessdate">. Retrieved 2007-06-08</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel%E2%80%99s+Next+Generation+Integrated+Graphics+Architecture%26nbsp%3B%E2%80%93+Intel+Graphics+Media+Accelerator+X3000+and+3000&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fproducts%2Fchipsets%2Fgma3000%2Fgma3000.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-6"><b><a href="#cite_ref-6">^</a></b> <span class="citation web"><a href="http://developer.intel.com/design/chipsets/applnots/313343.htm" class="external text" rel="nofollow">"Intel's Next Generation Integrated Graphics Architecture&#160;— Intel Graphics Media Accelerator X3000 and 3000 White Paper"</a><span class="printonly">. <a href="http://developer.intel.com/design/chipsets/applnots/313343.htm" class="external free" rel="nofollow">http://developer.intel.com/design/chipsets/applnots/313343.htm</a></span><span class="reference-accessdate">. Retrieved 2007-10-19</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel%27s+Next+Generation+Integrated+Graphics+Architecture%26nbsp%3B%E2%80%94+Intel+Graphics+Media+Accelerator+X3000+and+3000+White+Paper&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdeveloper.intel.com%2Fdesign%2Fchipsets%2Fapplnots%2F313343.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-7"><b><a href="#cite_ref-7">^</a></b> <span class="citation web"><a href="http://www.extremetech.com/article2/0,2845,2121189,00.asp" class="external text" rel="nofollow">"Intel G965 with GMA X3000 Integrated Graphics&#160;— Intel GMA X3000 Graphics Subsystem&#160;— CPUs, Boards &amp; Components by ExtremeTech"</a>. Extremetech.com<span class="printonly">. <a href="http://www.extremetech.com/article2/0,2845,2121189,00.asp" class="external free" rel="nofollow">http://www.extremetech.com/article2/0,2845,2121189,00.asp</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G965+with+GMA+X3000+Integrated+Graphics%26nbsp%3B%E2%80%94+Intel+GMA+X3000+Graphics+Subsystem%26nbsp%3B%E2%80%94+CPUs%2C+Boards+%26+Components+by+ExtremeTech&amp;rft.atitle=&amp;rft.pub=Extremetech.com&amp;rft_id=http%3A%2F%2Fwww.extremetech.com%2Farticle2%2F0%2C2845%2C2121189%2C00.asp&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-8"><b><a href="#cite_ref-8">^</a></b> <span class="citation web">Waldock, Leo (2007-12-05). <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/" class="external text" rel="nofollow">"Asus P5E-VM HDMI motherboard|Register Hardware"</a>. Reghardware.co.uk<span class="printonly">. <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/" class="external free" rel="nofollow">http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Asus+P5E-VM+HDMI+motherboard%26%23124%3BRegister+Hardware&amp;rft.atitle=&amp;rft.aulast=Waldock&amp;rft.aufirst=Leo&amp;rft.au=Waldock%2C%26%2332%3BLeo&amp;rft.date=2007-12-05&amp;rft.pub=Reghardware.co.uk&amp;rft_id=http%3A%2F%2Fwww.reghardware.co.uk%2F2007%2F12%2F05%2Freview_asus_p5e_vm_hdmi%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-9"><b><a href="#cite_ref-9">^</a></b> <span class="citation web"><a href="http://www.dailytech.com/2006+Intel+Desktop+Motherboard+Roadmap/article3063.htm" class="external text" rel="nofollow">"2006 Intel Desktop Motherboard Roadmap"</a>. DailyTech<span class="printonly">. <a href="http://www.dailytech.com/2006+Intel+Desktop+Motherboard+Roadmap/article3063.htm" class="external free" rel="nofollow">http://www.dailytech.com/2006+Intel+Desktop+Motherboard+Roadmap/article3063.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=2006+Intel+Desktop+Motherboard+Roadmap&amp;rft.atitle=&amp;rft.pub=DailyTech&amp;rft_id=http%3A%2F%2Fwww.dailytech.com%2F2006%2BIntel%2BDesktop%2BMotherboard%2BRoadmap%2Farticle3063.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-TRG965-10">^ <a href="#cite_ref-TRG965_10-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-TRG965_10-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-TRG965_10-2"><sup><i><b>c</b></i></sup></a> Gasior, Geoff. <a href="http://www.techreport.com/reviews/2007q2/intel-g965/index.x?pg=1" class="external text" rel="nofollow">Intel's G965 Express chipset</a>, Tech Report, April 5, 2007.</li>
+<li id="cite_note-Intel_82GM965_GL_Compatibility-11"><b><a href="#cite_ref-Intel_82GM965_GL_Compatibility_11-0">^</a></b> Intel, <a href="http://www.intel.com/support/graphics/sb/cs-010479.htm" class="external text" rel="nofollow">Intel 82GM965 OpenGL compatibility</a>, retrieved January 16, 2010</li>
+<li id="cite_note-autogenerated1-12">^ <a href="#cite_ref-autogenerated1_12-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-autogenerated1_12-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-autogenerated1_12-2"><sup><i><b>c</b></i></sup></a> <span class="citation web">Waldock, Leo (2007-12-05). <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page2.html" class="external text" rel="nofollow">"Asus P5E-VM HDMI motherboard|Register Hardware"</a>. Reghardware.co.uk<span class="printonly">. <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page2.html" class="external free" rel="nofollow">http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page2.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Asus+P5E-VM+HDMI+motherboard%26%23124%3BRegister+Hardware&amp;rft.atitle=&amp;rft.aulast=Waldock&amp;rft.aufirst=Leo&amp;rft.au=Waldock%2C%26%2332%3BLeo&amp;rft.date=2007-12-05&amp;rft.pub=Reghardware.co.uk&amp;rft_id=http%3A%2F%2Fwww.reghardware.co.uk%2F2007%2F12%2F05%2Freview_asus_p5e_vm_hdmi%2Fpage2.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-autogenerated6-13">^ <a href="#cite_ref-autogenerated6_13-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-autogenerated6_13-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-autogenerated6_13-2"><sup><i><b>c</b></i></sup></a> <span class="citation web"><a href="http://www.intel.com/products/desktop/chipsets/g45/g45-overview.htm" class="external text" rel="nofollow">"Intel G45 Express Chipset&#160;— Overview"</a>. Intel.com<span class="printonly">. <a href="http://www.intel.com/products/desktop/chipsets/g45/g45-overview.htm" class="external free" rel="nofollow">http://www.intel.com/products/desktop/chipsets/g45/g45-overview.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G45+Express+Chipset%26nbsp%3B%E2%80%94+Overview&amp;rft.atitle=&amp;rft.pub=Intel.com&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fproducts%2Fdesktop%2Fchipsets%2Fg45%2Fg45-overview.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-autogenerated2-14"><b><a href="#cite_ref-autogenerated2_14-0">^</a></b> <span class="citation web">Smith, Tony (2008-06-04). <a href="http://www.reghardware.co.uk/2008/06/04/intel_launches_g45_g43_chipsets/" class="external text" rel="nofollow">"Intel touts G45 chipset's full Blu-ray support|Register Hardware"</a>. Reghardware.co.uk<span class="printonly">. <a href="http://www.reghardware.co.uk/2008/06/04/intel_launches_g45_g43_chipsets/" class="external free" rel="nofollow">http://www.reghardware.co.uk/2008/06/04/intel_launches_g45_g43_chipsets/</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+touts+G45+chipset%27s+full+Blu-ray+support%26%23124%3BRegister+Hardware&amp;rft.atitle=&amp;rft.aulast=Smith&amp;rft.aufirst=Tony&amp;rft.au=Smith%2C%26%2332%3BTony&amp;rft.date=2008-06-04&amp;rft.pub=Reghardware.co.uk&amp;rft_id=http%3A%2F%2Fwww.reghardware.co.uk%2F2008%2F06%2F04%2Fintel_launches_g45_g43_chipsets%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-15"><b><a href="#cite_ref-15">^</a></b> <span class="citation web"><a href="http://www.intel.com/products/desktop/chipsets/g43/g43-overview.htm" class="external text" rel="nofollow">"Intel G43 Express Chipset&#160;— Overview"</a>. Intel.com. 2009-07-17<span class="printonly">. <a href="http://www.intel.com/products/desktop/chipsets/g43/g43-overview.htm" class="external free" rel="nofollow">http://www.intel.com/products/desktop/chipsets/g43/g43-overview.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G43+Express+Chipset%26nbsp%3B%E2%80%94+Overview&amp;rft.atitle=&amp;rft.date=2009-07-17&amp;rft.pub=Intel.com&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fproducts%2Fdesktop%2Fchipsets%2Fg43%2Fg43-overview.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-autogenerated3-16">^ <a href="#cite_ref-autogenerated3_16-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-autogenerated3_16-1"><sup><i><b>b</b></i></sup></a> <span class="citation web"><a href="http://softwarecommunity.intel.com/articles/eng/1488.htm" class="external text" rel="nofollow">"Quick Reference Guide to Intel Integrated Graphics"</a>. Softwarecommunity.intel.com<span class="printonly">. <a href="http://softwarecommunity.intel.com/articles/eng/1488.htm" class="external free" rel="nofollow">http://softwarecommunity.intel.com/articles/eng/1488.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Quick+Reference+Guide+to+Intel+Integrated+Graphics&amp;rft.atitle=&amp;rft.pub=Softwarecommunity.intel.com&amp;rft_id=http%3A%2F%2Fsoftwarecommunity.intel.com%2Farticles%2Feng%2F1488.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-17"><b><a href="#cite_ref-17">^</a></b> <span class="citation web"><a href="http://web.archive.org/web/20080731170252/http://www.fudzilla.com/index.php?option=com_content&amp;task=view&amp;id=8323&amp;Itemid=34" class="external text" rel="nofollow">"Intel G41 aims for Q4 2008"</a>. Fudzilla. 2008-07-08. Archived from <a href="http://www.fudzilla.com/index.php?option=com_content&amp;task=view&amp;id=8323&amp;Itemid=34" class="external text" rel="nofollow">the original</a> on July 31, 2008<span class="printonly">. <a href="http://web.archive.org/web/20080731170252/http://www.fudzilla.com/index.php?option=com_content&amp;task=view&amp;id=8323&amp;Itemid=34" class="external free" rel="nofollow">http://web.archive.org/web/20080731170252/http://www.fudzilla.com/index.php?option=com_content&amp;task=view&amp;id=8323&amp;Itemid=34</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G41+aims+for+Q4+2008&amp;rft.atitle=&amp;rft.date=2008-07-08&amp;rft.pub=Fudzilla&amp;rft_id=http%3A%2F%2Fweb.archive.org%2Fweb%2F20080731170252%2Fhttp%3A%2F%2Fwww.fudzilla.com%2Findex.php%3Foption%3Dcom_content%26task%3Dview%26id%3D8323%26Itemid%3D34&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-18"><b><a href="#cite_ref-18">^</a></b> <span class="citation web">Smith, Tony (2008-03-07). <a href="http://www.reghardware.co.uk/2008/03/07/intel_talks_up_gma_x4500_hd/" class="external text" rel="nofollow">"Intel talks up 'Eaglelake' DX10 chipset GPU tech | Register Hardware"</a>. Reghardware.co.uk<span class="printonly">. <a href="http://www.reghardware.co.uk/2008/03/07/intel_talks_up_gma_x4500_hd/" class="external free" rel="nofollow">http://www.reghardware.co.uk/2008/03/07/intel_talks_up_gma_x4500_hd/</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+talks+up+%27Eaglelake%27+DX10+chipset+GPU+tech+%26%23124%3B+Register+Hardware&amp;rft.atitle=&amp;rft.aulast=Smith&amp;rft.aufirst=Tony&amp;rft.au=Smith%2C%26%2332%3BTony&amp;rft.date=2008-03-07&amp;rft.pub=Reghardware.co.uk&amp;rft_id=http%3A%2F%2Fwww.reghardware.co.uk%2F2008%2F03%2F07%2Fintel_talks_up_gma_x4500_hd%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-19"><b><a href="#cite_ref-19">^</a></b> <span class="citation web"><a href="http://www.intel.com/products/desktop/chipsets/q43/q43-overview.htm" class="external text" rel="nofollow">"Intel Q43 Express Chipset&#160;— Overview"</a>. Intel.com<span class="printonly">. <a href="http://www.intel.com/products/desktop/chipsets/q43/q43-overview.htm" class="external free" rel="nofollow">http://www.intel.com/products/desktop/chipsets/q43/q43-overview.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+Q43+Express+Chipset%26nbsp%3B%E2%80%94+Overview&amp;rft.atitle=&amp;rft.pub=Intel.com&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fproducts%2Fdesktop%2Fchipsets%2Fq43%2Fq43-overview.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-20"><b><a href="#cite_ref-20">^</a></b> <span class="citation web"><a href="http://www.anandtech.com/show/2541" class="external text" rel="nofollow">"Intel Launches Low-Power 65nm 4 Series Chipsets for the Desktop"</a>. AnandTech. 2008-06-05<span class="printonly">. <a href="http://www.anandtech.com/show/2541" class="external free" rel="nofollow">http://www.anandtech.com/show/2541</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+Launches+Low-Power+65nm+4+Series+Chipsets+for+the+Desktop&amp;rft.atitle=&amp;rft.date=2008-06-05&amp;rft.pub=AnandTech&amp;rft_id=http%3A%2F%2Fwww.anandtech.com%2Fshow%2F2541&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-21"><b><a href="#cite_ref-21">^</a></b> <span class="citation web"><a href="http://web.archive.org/web/20071126144045/http://www.fudzilla.com/index.php?option=com_content&amp;task=view&amp;id=3828&amp;Itemid=1" class="external text" rel="nofollow">"G45 IGP runs 3Dmark06 3X faster"</a>. Archived from <a href="http://www.fudzilla.com/index.php?option=com_content&amp;task=view&amp;id=3828&amp;Itemid=1" class="external text" rel="nofollow">the original</a> on November 26, 2007<span class="printonly">. <a href="http://web.archive.org/web/20071126144045/http://www.fudzilla.com/index.php?option=com_content&amp;task=view&amp;id=3828&amp;Itemid=1" class="external free" rel="nofollow">http://web.archive.org/web/20071126144045/http://www.fudzilla.com/index.php?option=com_content&amp;task=view&amp;id=3828&amp;Itemid=1</a></span><span class="reference-accessdate">. Retrieved 2007-12-10</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=G45+IGP+runs+3Dmark06+3X+faster&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fweb.archive.org%2Fweb%2F20071126144045%2Fhttp%3A%2F%2Fwww.fudzilla.com%2Findex.php%3Foption%3Dcom_content%26task%3Dview%26id%3D3828%26Itemid%3D1&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-22"><b><a href="#cite_ref-22">^</a></b> <span class="citation web"><a href="http://www.vr-zone.com/articles/Intel_GMA_X4500HD,_X4500_&amp;_4500_Info/5505.html" class="external text" rel="nofollow">"Technology Beats&#160;— Intel GMA X4500HD, X4500 &amp; 4500 Info"</a>. VR-Zone. 2008-01-16<span class="printonly">. <a href="http://www.vr-zone.com/articles/Intel_GMA_X4500HD,_X4500_&amp;_4500_Info/5505.html" class="external free" rel="nofollow">http://www.vr-zone.com/articles/Intel_GMA_X4500HD,_X4500_&amp;_4500_Info/5505.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Technology+Beats%26nbsp%3B%E2%80%94+Intel+GMA+X4500HD%2C+X4500+%26+4500+Info&amp;rft.atitle=&amp;rft.date=2008-01-16&amp;rft.pub=VR-Zone&amp;rft_id=http%3A%2F%2Fwww.vr-zone.com%2Farticles%2FIntel_GMA_X4500HD%2C_X4500_%26_4500_Info%2F5505.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-23"><b><a href="#cite_ref-23">^</a></b> <span class="citation web"><a href="http://www.imgtec.com/News/Release/index.asp?NewsID=712" class="external text" rel="nofollow">"Imagination Technologies confirms new Intel Centrino Atom processor technology utilises POWERVR graphics and video technologies"</a><span class="printonly">. <a href="http://www.imgtec.com/News/Release/index.asp?NewsID=712" class="external free" rel="nofollow">http://www.imgtec.com/News/Release/index.asp?NewsID=712</a></span><span class="reference-accessdate">. Retrieved 2008-04-03</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Imagination+Technologies+confirms+new+Intel+Centrino+Atom+processor+technology+utilises+POWERVR+graphics+and+video+technologies&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.imgtec.com%2FNews%2FRelease%2Findex.asp%3FNewsID%3D712&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-24"><b><a href="#cite_ref-24">^</a></b> <span class="citation web"><a href="http://download.intel.com/design/chipsets/embedded/prodbrf/319545.pdf" class="external text" rel="nofollow">"US15W Product Brief"</a> (PDF)<span class="printonly">. <a href="http://download.intel.com/design/chipsets/embedded/prodbrf/319545.pdf" class="external free" rel="nofollow">http://download.intel.com/design/chipsets/embedded/prodbrf/319545.pdf</a></span><span class="reference-accessdate">. Retrieved 2008-04-03</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=US15W+Product+Brief&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdownload.intel.com%2Fdesign%2Fchipsets%2Fembedded%2Fprodbrf%2F319545.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-GMA900Brief-25">^ <a href="#cite_ref-GMA900Brief_25-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-GMA900Brief_25-1"><sup><i><b>b</b></i></sup></a> <span class="citation web"><a href="http://www.intel.com/products/chipsets/gma900/gma900.pdf" class="external text" rel="nofollow">"Intel GMA 900 Graphics Product Brief"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/products/chipsets/gma900/gma900.pdf" class="external free" rel="nofollow">http://www.intel.com/products/chipsets/gma900/gma900.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-10-18</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+GMA+900+Graphics+Product+Brief&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fproducts%2Fchipsets%2Fgma900%2Fgma900.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-int307508-001-26"><b><a href="#cite_ref-int307508-001_26-0">^</a></b> <span class="citation web"><a href="http://www.intel.com/Assets/PDF/whitepaper/307508.pdf" class="external text" rel="nofollow">"Mobile Intel 945 Express Chipset,Intel DVMT 3.0"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/Assets/PDF/whitepaper/307508.pdf" class="external free" rel="nofollow">http://www.intel.com/Assets/PDF/whitepaper/307508.pdf</a></span><span class="reference-accessdate">. Retrieved 2010-10-01</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Mobile+Intel+945+Express+Chipset%2CIntel+DVMT+3.0&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2FAssets%2FPDF%2Fwhitepaper%2F307508.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span><sup class="noprint Inline-Template"><span title="&#160;since November 2010" style="white-space: nowrap;">[<i><a href="/wiki/Wikipedia:Link_rot" title="Wikipedia:Link rot">dead link</a></i>]</span></sup></li>
+<li id="cite_note-G33datasheet-27">^ <a href="#cite_ref-G33datasheet_27-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-G33datasheet_27-1"><sup><i><b>b</b></i></sup></a> <span class="citation web"><a href="http://www.intel.com/Assets/PDF/datasheet/316966.pdf" class="external text" rel="nofollow">"Intel 3 Series Chipsets Datasheet"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/Assets/PDF/datasheet/316966.pdf" class="external free" rel="nofollow">http://www.intel.com/Assets/PDF/datasheet/316966.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-10-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+3+Series+Chipsets+Datasheet&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2FAssets%2FPDF%2Fdatasheet%2F316966.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-28"><b><a href="#cite_ref-28">^</a></b> <a href="http://download.intel.com/design/processor/datashts/322844.pdf" class="external text" rel="nofollow">Intel Atom Processor D400 and D500 Series Vol 1 Datasheet</a></li>
+<li id="cite_note-29"><b><a href="#cite_ref-29">^</a></b> <a href="http://software.intel.com/en-us/articles/quick-reference-guide-to-intel-integrated-graphics/" class="external autonumber" rel="nofollow">[1]</a></li>
+<li id="cite_note-intel317363-30">^ <a href="#cite_ref-intel317363_30-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-intel317363_30-1"><sup><i><b>b</b></i></sup></a> <span class="citation web"><a href="http://download.intel.com:80/products/chipsets/G35/317363.pdf" class="external text" rel="nofollow">"Intel G35 Product Brief"</a> (PDF)<span class="printonly">. <a href="http://download.intel.com:80/products/chipsets/G35/317363.pdf" class="external free" rel="nofollow">http://download.intel.com:80/products/chipsets/G35/317363.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G35+Product+Brief&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdownload.intel.com%3A80%2Fproducts%2Fchipsets%2FG35%2F317363.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-intel31627303-31">^ <a href="#cite_ref-intel31627303_31-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-intel31627303_31-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-intel31627303_31-2"><sup><i><b>c</b></i></sup></a> <a href="http://download.intel.com/design/mobile/datashts/31627303.pdf" class="external free" rel="nofollow">http://download.intel.com/design/mobile/datashts/31627303.pdf</a></li>
+<li id="cite_note-intel319970-32">^ <a href="#cite_ref-intel319970_32-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-intel319970_32-1"><sup><i><b>b</b></i></sup></a> <span class="citation web"><a href="http://www.intel.com/Assets/PDF/datasheet/319970.pdf" class="external text" rel="nofollow">"Intel 4 Series Chipset Family Datasheet"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/Assets/PDF/datasheet/319970.pdf" class="external free" rel="nofollow">http://www.intel.com/Assets/PDF/datasheet/319970.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+4+Series+Chipset+Family+Datasheet&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2FAssets%2FPDF%2Fdatasheet%2F319970.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-intel320122-33">^ <a href="#cite_ref-intel320122_33-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-intel320122_33-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-intel320122_33-2"><sup><i><b>c</b></i></sup></a> <span class="citation web"><a href="http://www.intel.com/Assets/PDF/datasheet/320122.pdf" class="external text" rel="nofollow">"Mobile Intel(R) 4 Series Express Chipset Family Datasheet"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/Assets/PDF/datasheet/320122.pdf" class="external free" rel="nofollow">http://www.intel.com/Assets/PDF/datasheet/320122.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Mobile+Intel%28R%29+4+Series+Express+Chipset+Family+Datasheet&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2FAssets%2FPDF%2Fdatasheet%2F320122.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-int30921904-34"><b><a href="#cite_ref-int30921904_34-0">^</a></b> <span class="citation web"><a href="http://www.intel.com/Assets/PDF/datasheet/309219.pdf" class="external text" rel="nofollow">"Mobile Intel 945 Express Chipset Family Datasheet"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/Assets/PDF/datasheet/309219.pdf" class="external free" rel="nofollow">http://www.intel.com/Assets/PDF/datasheet/309219.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-10-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Mobile+Intel+945+Express+Chipset+Family+Datasheet&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2FAssets%2FPDF%2Fdatasheet%2F309219.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-946exds-35"><b><a href="#cite_ref-946exds_35-0">^</a></b> <span class="citation web"><a href="http://download.intel.com/design/chipsets/datashts/31308301.pdf" class="external text" rel="nofollow">"Intel 946 Express Chipset Family Datasheet"</a> (PDF)<span class="printonly">. <a href="http://download.intel.com/design/chipsets/datashts/31308301.pdf" class="external free" rel="nofollow">http://download.intel.com/design/chipsets/datashts/31308301.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+946+Express+Chipset+Family+Datasheet&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdownload.intel.com%2Fdesign%2Fchipsets%2Fdatashts%2F31308301.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-vrzonegm47-36"><b><a href="#cite_ref-vrzonegm47_36-0">^</a></b> <span class="citation web"><a href="http://sg.vr-zone.com/articles/Intel_GM47_Mobile_Chipset_Delivers_2X_Graphics_Performance/5592.html" class="external text" rel="nofollow">"VR-Zone&#160;: Technology Beats&#160;— Intel GM47 Mobile Chipset Delivers 2X Graphics Performance"</a>. Sg.vr-zone.com. 2008-02-25<span class="printonly">. <a href="http://sg.vr-zone.com/articles/Intel_GM47_Mobile_Chipset_Delivers_2X_Graphics_Performance/5592.html" class="external free" rel="nofollow">http://sg.vr-zone.com/articles/Intel_GM47_Mobile_Chipset_Delivers_2X_Graphics_Performance/5592.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=VR-Zone+%3A+Technology+Beats%26nbsp%3B%E2%80%94+Intel+GM47+Mobile+Chipset+Delivers+2X+Graphics+Performance&amp;rft.atitle=&amp;rft.date=2008-02-25&amp;rft.pub=Sg.vr-zone.com&amp;rft_id=http%3A%2F%2Fsg.vr-zone.com%2Farticles%2FIntel_GM47_Mobile_Chipset_Delivers_2X_Graphics_Performance%2F5592.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-Intel910GMLdoc-37"><b><a href="#cite_ref-Intel910GMLdoc_37-0">^</a></b> <span class="citation web"><a href="http://www.intel.com/design/mobile/datashts/305264.htm" class="external text" rel="nofollow">"Intel 910GML datasheet"</a><span class="printonly">. <a href="http://www.intel.com/design/mobile/datashts/305264.htm" class="external free" rel="nofollow">http://www.intel.com/design/mobile/datashts/305264.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+910GML+datasheet&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fdesign%2Fmobile%2Fdatashts%2F305264.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-dd915945gm-38"><b><a href="#cite_ref-dd915945gm_38-0">^</a></b> Romanchenko, Vladimir. <a href="http://www.digital-daily.com/mobile/centrino_duo/index02.htm" class="external text" rel="nofollow">Intel Centrino Duo: new-generation mobility</a></li>
+<li id="cite_note-intel31760701-39"><b><a href="#cite_ref-intel31760701_39-0">^</a></b> <span class="citation web"><a href="http://download.intel.com/design/chipsets/datashts/31760701.pdf" class="external text" rel="nofollow">"Intel G35 Express Chipset Datasheet"</a> (PDF)<span class="printonly">. <a href="http://download.intel.com/design/chipsets/datashts/31760701.pdf" class="external free" rel="nofollow">http://download.intel.com/design/chipsets/datashts/31760701.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G35+Express+Chipset+Datasheet&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdownload.intel.com%2Fdesign%2Fchipsets%2Fdatashts%2F31760701.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-GMA900WhitePaper-40"><b><a href="#cite_ref-GMA900WhitePaper_40-0">^</a></b> <span class="citation web"><a href="http://www.intel.com/design/chipsets/applnots/30262403.pdf" class="external text" rel="nofollow">"Intel Graphics Media Accelerator 900"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/design/chipsets/applnots/30262403.pdf" class="external free" rel="nofollow">http://www.intel.com/design/chipsets/applnots/30262403.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+Graphics+Media+Accelerator+900&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fdesign%2Fchipsets%2Fapplnots%2F30262403.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-GMA950Brief-41"><b><a href="#cite_ref-GMA950Brief_41-0">^</a></b> <span class="citation web"><a href="http://www.intel.com/products/chipsets/gma950/gma950.pdf" class="external text" rel="nofollow">"Intel GMA 950 Graphics Product Brief"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/products/chipsets/gma950/gma950.pdf" class="external free" rel="nofollow">http://www.intel.com/products/chipsets/gma950/gma950.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+GMA+950+Graphics+Product+Brief&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fproducts%2Fchipsets%2Fgma950%2Fgma950.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-IntelX4500Dev-42"><b><a href="#cite_ref-IntelX4500Dev_42-0">^</a></b> <span class="citation web"><a href="http://software.intel.com/en-us/articles/intel-graphics-media-accelerator-developers-guide" class="external text" rel="nofollow">"Intel GMA Developers X4500 Guide"</a>. Software.intel.com<span class="printonly">. <a href="http://software.intel.com/en-us/articles/intel-graphics-media-accelerator-developers-guide" class="external free" rel="nofollow">http://software.intel.com/en-us/articles/intel-graphics-media-accelerator-developers-guide</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+GMA+Developers+X4500+Guide&amp;rft.atitle=&amp;rft.pub=Software.intel.com&amp;rft_id=http%3A%2F%2Fsoftware.intel.com%2Fen-us%2Farticles%2Fintel-graphics-media-accelerator-developers-guide&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-AsusBoard1-43"><b><a href="#cite_ref-AsusBoard1_43-0">^</a></b> <span class="citation web"><a href="http://www.asus.com/product.aspx?P_ID=J97UJny8SDGV7Vm1&amp;templete=2" class="external text" rel="nofollow">"ASUSTeK Computer Inc"</a>. Asus.com<span class="printonly">. <a href="http://www.asus.com/product.aspx?P_ID=J97UJny8SDGV7Vm1&amp;templete=2" class="external free" rel="nofollow">http://www.asus.com/product.aspx?P_ID=J97UJny8SDGV7Vm1&amp;templete=2</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=ASUSTeK+Computer+Inc&amp;rft.atitle=&amp;rft.pub=Asus.com&amp;rft_id=http%3A%2F%2Fwww.asus.com%2Fproduct.aspx%3FP_ID%3DJ97UJny8SDGV7Vm1%26templete%3D2&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-AsusBoard3-44"><b><a href="#cite_ref-AsusBoard3_44-0">^</a></b> <span class="citation web"><a href="http://www.asus.com/product.aspx?P_ID=EJybwaQ3J8goocW2&amp;templete=2" class="external text" rel="nofollow">"ASUSTeK Computer Inc"</a>. Asus.com<span class="printonly">. <a href="http://www.asus.com/product.aspx?P_ID=EJybwaQ3J8goocW2&amp;templete=2" class="external free" rel="nofollow">http://www.asus.com/product.aspx?P_ID=EJybwaQ3J8goocW2&amp;templete=2</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=ASUSTeK+Computer+Inc&amp;rft.atitle=&amp;rft.pub=Asus.com&amp;rft_id=http%3A%2F%2Fwww.asus.com%2Fproduct.aspx%3FP_ID%3DEJybwaQ3J8goocW2%26templete%3D2&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-AsusBoard2-45"><b><a href="#cite_ref-AsusBoard2_45-0">^</a></b> <span class="citation web"><a href="http://www.asus.com/product.aspx?P_ID=cr9CeQwu3BN3zCro&amp;templete=2" class="external text" rel="nofollow">"ASUSTeK Computer Inc"</a>. Asus.com<span class="printonly">. <a href="http://www.asus.com/product.aspx?P_ID=cr9CeQwu3BN3zCro&amp;templete=2" class="external free" rel="nofollow">http://www.asus.com/product.aspx?P_ID=cr9CeQwu3BN3zCro&amp;templete=2</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=ASUSTeK+Computer+Inc&amp;rft.atitle=&amp;rft.pub=Asus.com&amp;rft_id=http%3A%2F%2Fwww.asus.com%2Fproduct.aspx%3FP_ID%3Dcr9CeQwu3BN3zCro%26templete%3D2&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-WDDM-46"><b><a href="#cite_ref-WDDM_46-0">^</a></b> <span class="citation web"><a href="http://catalog.update.microsoft.com/v7/site/Search.aspx?q=windows%207%20client%20intel%20video" class="external text" rel="nofollow">"Microsoft Update Catalog"</a>. Catalog.update.microsoft.com<span class="printonly">. <a href="http://catalog.update.microsoft.com/v7/site/Search.aspx?q=windows%207%20client%20intel%20video" class="external free" rel="nofollow">http://catalog.update.microsoft.com/v7/site/Search.aspx?q=windows%207%20client%20intel%20video</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Microsoft+Update+Catalog&amp;rft.atitle=&amp;rft.pub=Catalog.update.microsoft.com&amp;rft_id=http%3A%2F%2Fcatalog.update.microsoft.com%2Fv7%2Fsite%2FSearch.aspx%3Fq%3Dwindows%25207%2520client%2520intel%2520video&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-intelgfxref-47"><b><a href="#cite_ref-intelgfxref_47-0">^</a></b> <span class="citation web"><a href="http://software.intel.com/en-us/articles/quick-reference-guide-to-intel-integrated-graphics" class="external text" rel="nofollow">"Quick Reference Guide to Intel Integrated Graphics"</a>. Software.intel.com<span class="printonly">. <a href="http://software.intel.com/en-us/articles/quick-reference-guide-to-intel-integrated-graphics" class="external free" rel="nofollow">http://software.intel.com/en-us/articles/quick-reference-guide-to-intel-integrated-graphics</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Quick+Reference+Guide+to+Intel+Integrated+Graphics&amp;rft.atitle=&amp;rft.pub=Software.intel.com&amp;rft_id=http%3A%2F%2Fsoftware.intel.com%2Fen-us%2Farticles%2Fquick-reference-guide-to-intel-integrated-graphics&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-915GMdatasheet-48"><b><a href="#cite_ref-915GMdatasheet_48-0">^</a></b> <span class="citation web"><a href="http://download.intel.com/design/mobile/datashts/30526402.pdf" class="external text" rel="nofollow">"Microsoft Word - 305264-002_JW2.doc"</a> (PDF)<span class="printonly">. <a href="http://download.intel.com/design/mobile/datashts/30526402.pdf" class="external free" rel="nofollow">http://download.intel.com/design/mobile/datashts/30526402.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Microsoft+Word+-+305264-002_JW2.doc&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdownload.intel.com%2Fdesign%2Fmobile%2Fdatashts%2F30526402.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-Intel82G965-49"><b><a href="#cite_ref-Intel82G965_49-0">^</a></b> <span class="citation web"><a href="http://www.intel.com/support/graphics/intelg965/sb/CS-023713.htm" class="external text" rel="nofollow">"Intel 82G965 Graphics and Memory Controller Hub (GMCH) OpenGL Support"</a>. Intel.com<span class="printonly">. <a href="http://www.intel.com/support/graphics/intelg965/sb/CS-023713.htm" class="external free" rel="nofollow">http://www.intel.com/support/graphics/intelg965/sb/CS-023713.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+82G965+Graphics+and+Memory+Controller+Hub+%28GMCH%29+OpenGL+Support&amp;rft.atitle=&amp;rft.pub=Intel.com&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fsupport%2Fgraphics%2Fintelg965%2Fsb%2FCS-023713.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-IntelSCHdatasheet-50"><b><a href="#cite_ref-IntelSCHdatasheet_50-0">^</a></b> <span class="citation web"><a href="http://download.intel.com/design/chipsets/embedded/datashts/319537.pdf" class="external text" rel="nofollow">"SCH_DS_319537-002US.book"</a> (PDF)<span class="printonly">. <a href="http://download.intel.com/design/chipsets/embedded/datashts/319537.pdf" class="external free" rel="nofollow">http://download.intel.com/design/chipsets/embedded/datashts/319537.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=SCH_DS_319537-002US.book&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdownload.intel.com%2Fdesign%2Fchipsets%2Fembedded%2Fdatashts%2F319537.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-IntelSCHspecupd-51"><b><a href="#cite_ref-IntelSCHspecupd_51-0">^</a></b> <span class="citation web"><a href="http://download.intel.com/design/chipsets/embedded/specupdt/319538.pdf" class="external text" rel="nofollow">"Intel System Controller Hub (Intel SCH) Specification Update"</a> (PDF)<span class="printonly">. <a href="http://download.intel.com/design/chipsets/embedded/specupdt/319538.pdf" class="external free" rel="nofollow">http://download.intel.com/design/chipsets/embedded/specupdt/319538.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+System+Controller+Hub+%28Intel+SCH%29+Specification+Update&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fdownload.intel.com%2Fdesign%2Fchipsets%2Fembedded%2Fspecupdt%2F319538.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-IntelGDC20080221_Graphics-52"><b><a href="#cite_ref-IntelGDC20080221_Graphics_52-0">^</a></b> <span class="citation web"><a href="http://software.intel.com/file/1477" class="external text" rel="nofollow">"Getting the Most Out of Intel Graphics.ppt"</a><span class="printonly">. <a href="http://software.intel.com/file/1477" class="external free" rel="nofollow">http://software.intel.com/file/1477</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Getting+the+Most+Out+of+Intel+Graphics.ppt&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fsoftware.intel.com%2Ffile%2F1477&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-IntelNotesXP14.36.3.4990-53"><b><a href="#cite_ref-IntelNotesXP14.36.3.4990_53-0">^</a></b> <span class="citation web"><a href="http://downloadmirror.intel.com/16945/eng/relnotes_2k_xp_gfx.htm" class="external text" rel="nofollow">"Release notes of Windows XP driver v14.36.3"</a>. Downloadmirror.intel.com<span class="printonly">. <a href="http://downloadmirror.intel.com/16945/eng/relnotes_2k_xp_gfx.htm" class="external free" rel="nofollow">http://downloadmirror.intel.com/16945/eng/relnotes_2k_xp_gfx.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Release+notes+of+Windows+XP+driver+v14.36.3&amp;rft.atitle=&amp;rft.pub=Downloadmirror.intel.com&amp;rft_id=http%3A%2F%2Fdownloadmirror.intel.com%2F16945%2Feng%2Frelnotes_2k_xp_gfx.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span><sup class="noprint Inline-Template"><span title="&#160;since October 2010" style="white-space: nowrap;">[<i><a href="/wiki/Wikipedia:Link_rot" title="Wikipedia:Link rot">dead link</a></i>]</span></sup></li>
+<li id="cite_note-IntelNotesVista15.11.2-54"><b><a href="#cite_ref-IntelNotesVista15.11.2_54-0">^</a></b> <span class="citation web"><a href="http://downloadmirror.intel.com/16940/eng/relnotes_winvista_gfx.htm" class="external text" rel="nofollow">"Release notes of Windows Vista driver v15.11.2"</a>. Downloadmirror.intel.com. 2008-08-22<span class="printonly">. <a href="http://downloadmirror.intel.com/16940/eng/relnotes_winvista_gfx.htm" class="external free" rel="nofollow">http://downloadmirror.intel.com/16940/eng/relnotes_winvista_gfx.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Release+notes+of+Windows+Vista+driver+v15.11.2&amp;rft.atitle=&amp;rft.date=2008-08-22&amp;rft.pub=Downloadmirror.intel.com&amp;rft_id=http%3A%2F%2Fdownloadmirror.intel.com%2F16940%2Feng%2Frelnotes_winvista_gfx.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-IntelXorgOpenGL2.1-55"><b><a href="#cite_ref-IntelXorgOpenGL2.1_55-0">^</a></b> <span class="citation web"><a href="http://lists.freedesktop.org/archives/xorg/2008-October/039250.html" class="external text" rel="nofollow">"Xorg ML OpenGL 2.1 enters intel driver"</a>. Lists.freedesktop.org. 2008-10-07<span class="printonly">. <a href="http://lists.freedesktop.org/archives/xorg/2008-October/039250.html" class="external free" rel="nofollow">http://lists.freedesktop.org/archives/xorg/2008-October/039250.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Xorg+ML+OpenGL+2.1+enters+intel+driver&amp;rft.atitle=&amp;rft.date=2008-10-07&amp;rft.pub=Lists.freedesktop.org&amp;rft_id=http%3A%2F%2Flists.freedesktop.org%2Farchives%2Fxorg%2F2008-October%2F039250.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-56"><b><a href="#cite_ref-56">^</a></b> <span class="citation web"><a href="http://guides.macrumors.com/iMac_%28Intel%29" class="external text" rel="nofollow">"iMac (Intel) - Mac Guides"</a>. Guides.macrumors.com<span class="printonly">. <a href="http://guides.macrumors.com/iMac_%28Intel%29" class="external free" rel="nofollow">http://guides.macrumors.com/iMac_%28Intel%29</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=iMac+%28Intel%29+-+Mac+Guides&amp;rft.atitle=&amp;rft.pub=Guides.macrumors.com&amp;rft_id=http%3A%2F%2Fguides.macrumors.com%2FiMac_%2528Intel%2529&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-macmini-57"><b><a href="#cite_ref-macmini_57-0">^</a></b> <span class="citation web"><a href="http://guides.macrumors.com/Mac_mini_%28Intel%29" class="external text" rel="nofollow">"Mac mini (Intel) - Mac Guides"</a>. Guides.macrumors.com<span class="printonly">. <a href="http://guides.macrumors.com/Mac_mini_%28Intel%29" class="external free" rel="nofollow">http://guides.macrumors.com/Mac_mini_%28Intel%29</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Mac+mini+%28Intel%29+-+Mac+Guides&amp;rft.atitle=&amp;rft.pub=Guides.macrumors.com&amp;rft_id=http%3A%2F%2Fguides.macrumors.com%2FMac_mini_%2528Intel%2529&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-58"><b><a href="#cite_ref-58">^</a></b> <span class="citation web"><a href="http://www.macrumors.com/2007/11/01/apple-updates-macbooks-to-santa-rosa-gma-x3100/" class="external text" rel="nofollow">"Apple Updates MacBooks to Santa Rosa, GMA X3100; 2.6GHz MacBook Pro&#160;— Mac Rumors"</a>. Mac Rumors&lt;!. 2007-11-01<span class="printonly">. <a href="http://www.macrumors.com/2007/11/01/apple-updates-macbooks-to-santa-rosa-gma-x3100/" class="external free" rel="nofollow">http://www.macrumors.com/2007/11/01/apple-updates-macbooks-to-santa-rosa-gma-x3100/</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Apple+Updates+MacBooks+to+Santa+Rosa%2C+GMA+X3100%3B+2.6GHz+MacBook+Pro%26nbsp%3B%E2%80%94+Mac+Rumors&amp;rft.atitle=&amp;rft.date=2007-11-01&amp;rft.pub=Mac+Rumors%3C%21&amp;rft_id=http%3A%2F%2Fwww.macrumors.com%2F2007%2F11%2F01%2Fapple-updates-macbooks-to-santa-rosa-gma-x3100%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-59"><b><a href="#cite_ref-59">^</a></b> <span class="citation web"><a href="http://www.tomshardware.com/reviews/nvidia-ion-atom,2153-6.html" class="external text" rel="nofollow">"Nvidia's Ion: Lending Atom Some Wings&#160;— Tom's Hardware"</a>. Tomshardware.com<span class="printonly">. <a href="http://www.tomshardware.com/reviews/nvidia-ion-atom,2153-6.html" class="external free" rel="nofollow">http://www.tomshardware.com/reviews/nvidia-ion-atom,2153-6.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Nvidia%27s+Ion%3A+Lending+Atom+Some+Wings%26nbsp%3B%E2%80%94+Tom%27s+Hardware&amp;rft.atitle=&amp;rft.pub=Tomshardware.com&amp;rft_id=http%3A%2F%2Fwww.tomshardware.com%2Freviews%2Fnvidia-ion-atom%2C2153-6.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-60"><b><a href="#cite_ref-60">^</a></b> <span class="citation web"><a href="http://www.nvidia.com/object/product_geforce_9400m_g_us.html" class="external text" rel="nofollow">"GeForce 9400M motherboard GPU"</a>. Nvidia.com<span class="printonly">. <a href="http://www.nvidia.com/object/product_geforce_9400m_g_us.html" class="external free" rel="nofollow">http://www.nvidia.com/object/product_geforce_9400m_g_us.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=GeForce+9400M+motherboard+GPU&amp;rft.atitle=&amp;rft.pub=Nvidia.com&amp;rft_id=http%3A%2F%2Fwww.nvidia.com%2Fobject%2Fproduct_geforce_9400m_g_us.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-61"><b><a href="#cite_ref-61">^</a></b> <a href="http://support.apple.com/kb/HT3413" class="external text" rel="nofollow">MacBook: Mini-DVI to video adapter compatibility</a></li>
+<li id="cite_note-62"><b><a href="#cite_ref-62">^</a></b> <a href="http://www.apple.com/macbookpro/specs.html" class="external text" rel="nofollow">MacBook Pro: Tech Specs</a></li>
+<li id="cite_note-63"><b><a href="#cite_ref-63">^</a></b> <a href="http://www.intellinuxgraphics.org" class="external text" rel="nofollow">Intel Linux graphics web site</a></li>
+<li id="cite_note-64"><b><a href="#cite_ref-64">^</a></b> <a href="http://www.tungstengraphics.com/" class="external text" rel="nofollow">Tungsten Graphics web site</a></li>
+<li id="cite_note-65"><b><a href="#cite_ref-65">^</a></b> <span class="citation web">cook (2007-05-10). <a href="http://lwn.net/Articles/233868/" class="external text" rel="nofollow">"Free software drivers for the Intel 965GM Express Chipset"</a>. Lwn.net<span class="printonly">. <a href="http://lwn.net/Articles/233868/" class="external free" rel="nofollow">http://lwn.net/Articles/233868/</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Free+software+drivers+for+the+Intel+965GM+Express+Chipset&amp;rft.atitle=&amp;rft.aulast=cook&amp;rft.au=cook&amp;rft.date=2007-05-10&amp;rft.pub=Lwn.net&amp;rft_id=http%3A%2F%2Flwn.net%2FArticles%2F233868%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-66"><b><a href="#cite_ref-66">^</a></b> <span class="citation web">Eric Anholt. <a href="http://lists.freedesktop.org/archives/xorg-announce/2007-July/000318.html" class="external text" rel="nofollow">"X.Org mailing list: xf86-video-intel 2.1.0"</a><span class="printonly">. <a href="http://lists.freedesktop.org/archives/xorg-announce/2007-July/000318.html" class="external free" rel="nofollow">http://lists.freedesktop.org/archives/xorg-announce/2007-July/000318.html</a></span><span class="reference-accessdate">. Retrieved 2007-07-09</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=X.Org+mailing+list%3A+xf86-video-intel+2.1.0&amp;rft.atitle=&amp;rft.aulast=Eric+Anholt&amp;rft.au=Eric+Anholt&amp;rft_id=http%3A%2F%2Flists.freedesktop.org%2Farchives%2Fxorg-announce%2F2007-July%2F000318.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-67"><b><a href="#cite_ref-67">^</a></b> <span class="citation web"><a href="http://intellinuxgraphics.org/documentation.html" class="external text" rel="nofollow">"Driver Documentation"</a><span class="printonly">. <a href="http://intellinuxgraphics.org/documentation.html" class="external free" rel="nofollow">http://intellinuxgraphics.org/documentation.html</a></span><span class="reference-accessdate">. Retrieved 2008-02-01</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Driver+Documentation&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fintellinuxgraphics.org%2Fdocumentation.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-68"><b><a href="#cite_ref-68">^</a></b> <span class="citation web">Linux Graphics Drivers from Intel. <a href="http://intellinuxgraphics.org/license.html" class="external text" rel="nofollow">"Open Source Graphics Drivers from Intel&#160;— Licence"</a>. Intellinuxgraphics.org<span class="printonly">. <a href="http://intellinuxgraphics.org/license.html" class="external free" rel="nofollow">http://intellinuxgraphics.org/license.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Open+Source+Graphics+Drivers+from+Intel%26nbsp%3B%E2%80%94+Licence&amp;rft.atitle=&amp;rft.aulast=Linux+Graphics+Drivers+from+Intel&amp;rft.au=Linux+Graphics+Drivers+from+Intel&amp;rft.pub=Intellinuxgraphics.org&amp;rft_id=http%3A%2F%2Fintellinuxgraphics.org%2Flicense.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-69"><b><a href="#cite_ref-69">^</a></b> <span class="citation web"><a href="/wiki/Michael_Larabel">Michael Larabel</a> (January 31, 2008). <a href="http://www.phoronix.com/scan.php?page=article&amp;item=984&amp;num=1" class="external text" rel="nofollow">"Intel Releases Open 965/G35 IGP Programming Documentation"</a>. <a href="/wiki/Phoronix">Phoronix</a> Media<span class="printonly">. <a href="http://www.phoronix.com/scan.php?page=article&amp;item=984&amp;num=1" class="external free" rel="nofollow">http://www.phoronix.com/scan.php?page=article&amp;item=984&amp;num=1</a></span><span class="reference-accessdate">. Retrieved 2009-11-11</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+Releases+Open+965%2FG35+IGP+Programming+Documentation&amp;rft.atitle=&amp;rft.aulast=%5B%5BMichael+Larabel%5D%5D&amp;rft.au=%5B%5BMichael+Larabel%5D%5D&amp;rft.date=January+31%2C+2008&amp;rft.pub=%5B%5BPhoronix%5D%5D+Media&amp;rft_id=http%3A%2F%2Fwww.phoronix.com%2Fscan.php%3Fpage%3Darticle%26item%3D984%26num%3D1&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-70"><b><a href="#cite_ref-70">^</a></b> <span class="citation web"><a href="http://www.x.org/docs/intel/" class="external text" rel="nofollow">"Index of /docs/intel"</a><span class="printonly">. <a href="http://www.x.org/docs/intel/" class="external free" rel="nofollow">http://www.x.org/docs/intel/</a></span><span class="reference-accessdate">. Retrieved 2008-02-01</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Index+of+%2Fdocs%2Fintel&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.x.org%2Fdocs%2Fintel%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-71"><b><a href="#cite_ref-71">^</a></b> <span class="citation web"><a href="/wiki/Michael_Larabel">Michael Larabel</a> (April 15, 2009). <a href="http://www.phoronix.com/scan.php?page=article&amp;item=intel_g45_dump&amp;num=1" class="external text" rel="nofollow">"Intel Drops A Load Of G45 Programming Documentation"</a>. <a href="/wiki/Phoronix">Phoronix</a> Media<span class="printonly">. <a href="http://www.phoronix.com/scan.php?page=article&amp;item=intel_g45_dump&amp;num=1" class="external free" rel="nofollow">http://www.phoronix.com/scan.php?page=article&amp;item=intel_g45_dump&amp;num=1</a></span><span class="reference-accessdate">. Retrieved 2009-11-11</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+Drops+A+Load+Of+G45+Programming+Documentation&amp;rft.atitle=&amp;rft.aulast=%5B%5BMichael+Larabel%5D%5D&amp;rft.au=%5B%5BMichael+Larabel%5D%5D&amp;rft.date=April+15%2C+2009&amp;rft.pub=%5B%5BPhoronix%5D%5D+Media&amp;rft_id=http%3A%2F%2Fwww.phoronix.com%2Fscan.php%3Fpage%3Darticle%26item%3Dintel_g45_dump%26num%3D1&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-72"><b><a href="#cite_ref-72">^</a></b> <span class="citation web">Eric Anholt (May 29, 2009). <a href="http://anholt.livejournal.com/41132.html" class="external text" rel="nofollow">"I fixed 8xx 3D rendering"</a><span class="printonly">. <a href="http://anholt.livejournal.com/41132.html" class="external free" rel="nofollow">http://anholt.livejournal.com/41132.html</a></span><span class="reference-accessdate">. Retrieved 2009-11-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=I+fixed+8xx+3D+rendering&amp;rft.atitle=&amp;rft.aulast=Eric+Anholt&amp;rft.au=Eric+Anholt&amp;rft.date=May+29%2C+2009&amp;rft_id=http%3A%2F%2Fanholt.livejournal.com%2F41132.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-73"><b><a href="#cite_ref-73">^</a></b> <span class="citation web"><a href="http://lkml.org/lkml/2006/8/9/333" class="external text" rel="nofollow">"LKML thread about intel_hal.so"</a>. Lkml.org. 2006-08-09<span class="printonly">. <a href="http://lkml.org/lkml/2006/8/9/333" class="external free" rel="nofollow">http://lkml.org/lkml/2006/8/9/333</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=LKML+thread+about+intel_hal.so&amp;rft.atitle=&amp;rft.date=2006-08-09&amp;rft.pub=Lkml.org&amp;rft_id=http%3A%2F%2Flkml.org%2Flkml%2F2006%2F8%2F9%2F333&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-74"><b><a href="#cite_ref-74">^</a></b> <span class="citation web"><a href="http://thread.gmane.org/gmane.comp.freedesktop.xorg/11780" class="external text" rel="nofollow">"X.Org ML thread about intel_hal.so"</a>. Thread.gmane.org<span class="printonly">. <a href="http://thread.gmane.org/gmane.comp.freedesktop.xorg/11780" class="external free" rel="nofollow">http://thread.gmane.org/gmane.comp.freedesktop.xorg/11780</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=X.Org+ML+thread+about+intel_hal.so&amp;rft.atitle=&amp;rft.pub=Thread.gmane.org&amp;rft_id=http%3A%2F%2Fthread.gmane.org%2Fgmane.comp.freedesktop.xorg%2F11780&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-75"><b><a href="#cite_ref-75">^</a></b> <span class="citation web"><a href="https://wiki.ubuntu.com/HardwareSupportComponentsVideoCardsPoulsbo/" class="external text" rel="nofollow">"Hardware support components Video cards Poulsbo"</a>. ubuntu.com. 2009-09-25<span class="printonly">. <a href="https://wiki.ubuntu.com/HardwareSupportComponentsVideoCardsPoulsbo/" class="external free" rel="nofollow">https://wiki.ubuntu.com/HardwareSupportComponentsVideoCardsPoulsbo/</a></span><span class="reference-accessdate">. Retrieved 2009-10-10</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Hardware+support+components+Video+cards+Poulsbo&amp;rft.atitle=&amp;rft.date=2009-09-25&amp;rft.pub=ubuntu.com&amp;rft_id=https%3A%2F%2Fwiki.ubuntu.com%2FHardwareSupportComponentsVideoCardsPoulsbo%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-76"><b><a href="#cite_ref-76">^</a></b> <span class="citation web"><a href="https://wiki.ubuntu.com/HardwareSupportComponentsVideoCardsPoulsbo/" class="external text" rel="nofollow">"Hardware support components Video cards Poulsbo"</a>. ubuntu.com. 2010-09-04<span class="printonly">. <a href="https://wiki.ubuntu.com/HardwareSupportComponentsVideoCardsPoulsbo/" class="external free" rel="nofollow">https://wiki.ubuntu.com/HardwareSupportComponentsVideoCardsPoulsbo/</a></span><span class="reference-accessdate">. Retrieved 2010-09-09</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Hardware+support+components+Video+cards+Poulsbo&amp;rft.atitle=&amp;rft.date=2010-09-04&amp;rft.pub=ubuntu.com&amp;rft_id=https%3A%2F%2Fwiki.ubuntu.com%2FHardwareSupportComponentsVideoCardsPoulsbo%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-77"><b><a href="#cite_ref-77">^</a></b> <span class="citation web"><a href="/wiki/Michael_Larabel">Michael Larabel</a> (November 2, 2009). <a href="http://www.phoronix.com/scan.php?page=news_item&amp;px=NzY2Mg" class="external text" rel="nofollow">"Intel's Special Driver For Poulsbo Uses Gallium3D"</a>. <a href="/wiki/Phoronix">Phoronix</a> Media<span class="printonly">. <a href="http://www.phoronix.com/scan.php?page=news_item&amp;px=NzY2Mg" class="external free" rel="nofollow">http://www.phoronix.com/scan.php?page=news_item&amp;px=NzY2Mg</a></span><span class="reference-accessdate">. Retrieved 2009-11-20</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel%27s+Special+Driver+For+Poulsbo+Uses+Gallium3D&amp;rft.atitle=&amp;rft.aulast=%5B%5BMichael+Larabel%5D%5D&amp;rft.au=%5B%5BMichael+Larabel%5D%5D&amp;rft.date=November+2%2C+2009&amp;rft.pub=%5B%5BPhoronix%5D%5D+Media&amp;rft_id=http%3A%2F%2Fwww.phoronix.com%2Fscan.php%3Fpage%3Dnews_item%26px%3DNzY2Mg&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-78"><b><a href="#cite_ref-78">^</a></b> <span class="citation web"><a href="http://it.opensolaris.org/os/project/dri/" class="external text" rel="nofollow">"Direct Rendering Infrastructure &amp; 3D drivers at OpenSolaris.org"</a>. It.opensolaris.org. 2009-08-28<span class="printonly">. <a href="http://it.opensolaris.org/os/project/dri/" class="external free" rel="nofollow">http://it.opensolaris.org/os/project/dri/</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Direct+Rendering+Infrastructure+%26+3D+drivers+at+OpenSolaris.org&amp;rft.atitle=&amp;rft.date=2009-08-28&amp;rft.pub=It.opensolaris.org&amp;rft_id=http%3A%2F%2Fit.opensolaris.org%2Fos%2Fproject%2Fdri%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-79"><b><a href="#cite_ref-79">^</a></b> <a href="http://forum.beyond3d.com/showthread.php?t=35048" class="external text" rel="nofollow">Intel excuse for no GMA900 WDDM driver: no "HW Scheduler" no driver</a>, Beyond3D, October 26, 2006.</li>
+<li id="cite_note-80"><b><a href="#cite_ref-80">^</a></b> <span class="citation web"><a href="http://softwarecommunity.intel.com/isn/Community/en-US/forums/30233994/ShowThread.aspx#30233994" class="external text" rel="nofollow">"Intel’s response to 915G WDDM requests"</a>. Softwarecommunity.intel.com<span class="printonly">. <a href="http://softwarecommunity.intel.com/isn/Community/en-US/forums/30233994/ShowThread.aspx#30233994" class="external free" rel="nofollow">http://softwarecommunity.intel.com/isn/Community/en-US/forums/30233994/ShowThread.aspx#30233994</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel%E2%80%99s+response+to+915G+WDDM+requests&amp;rft.atitle=&amp;rft.pub=Softwarecommunity.intel.com&amp;rft_id=http%3A%2F%2Fsoftwarecommunity.intel.com%2Fisn%2FCommunity%2Fen-US%2Fforums%2F30233994%2FShowThread.aspx%2330233994&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-81"><b><a href="#cite_ref-81">^</a></b> <a href="http://www.intel.com/products/chipsets/gma950/index.htm" class="external text" rel="nofollow">GMA950specs</a> on Intel</li>
+<li id="cite_note-82"><b><a href="#cite_ref-82">^</a></b> <a href="http://www.intel.com/support/graphics/intelg965/sb/CS-025665.htm" class="external text" rel="nofollow">Intel G965 drivers Announce</a><sup class="noprint Inline-Template"><span title="&#160;since September 2009" style="white-space: nowrap;">[<i><a href="/wiki/Wikipedia:Link_rot" title="Wikipedia:Link rot">dead link</a></i>]</span></sup></li>
+<li id="cite_note-83"><b><a href="#cite_ref-83">^</a></b> <a href="http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30229561.aspx" class="external text" rel="nofollow">G965 drivers Forum Discussion</a><sup class="noprint Inline-Template"><span title="&#160;since September 2009" style="white-space: nowrap;">[<i><a href="/wiki/Wikipedia:Link_rot" title="Wikipedia:Link rot">dead link</a></i>]</span></sup></li>
+<li id="cite_note-84"><b><a href="#cite_ref-84">^</a></b> <a href="http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&amp;Inst=Yes&amp;ProductID=2576&amp;DwnldID=13515&amp;strOSs=All&amp;OSFullName=All%20Operating%20Systems&amp;lang=eng" class="external text" rel="nofollow">Pre-Beta XP Drivers</a></li>
+<li id="cite_note-85"><b><a href="#cite_ref-85">^</a></b> <a href="http://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&amp;Inst=Yes&amp;ProductID=2800&amp;DwnldID=13638&amp;strOSs=44&amp;OSFullName=Windows*%20XP%20Professional&amp;lang=eng" class="external text" rel="nofollow">Mobile Intel 965 Express Chipset Family Intel Graphics Media Accelerator Beta Driver for Windows* XP (zip)</a></li>
+<li id="cite_note-86"><b><a href="#cite_ref-86">^</a></b> <span class="citation web"><a href="http://www.intel.com/assets/pdf/whitepaper/318888.pdf" class="external text" rel="nofollow">"Vertex Processing Selection Capability White Paper for Intel G965, G35, and GM965 Express Chipsets"</a> (PDF)<span class="printonly">. <a href="http://www.intel.com/assets/pdf/whitepaper/318888.pdf" class="external free" rel="nofollow">http://www.intel.com/assets/pdf/whitepaper/318888.pdf</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Vertex+Processing+Selection+Capability+White+Paper+for+Intel+G965%2C+G35%2C+and+GM965+Express+Chipsets&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fassets%2Fpdf%2Fwhitepaper%2F318888.pdf&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-87"><b><a href="#cite_ref-87">^</a></b> <span class="citation web"><a href="http://downloadmirror.intel.com/17040/eng/relnotes_winvista_gfx.htm" class="external text" rel="nofollow">"Release Notes Vista driver 15.11.3.1576"</a>. Downloadmirror.intel.com. 2008-08-22<span class="printonly">. <a href="http://downloadmirror.intel.com/17040/eng/relnotes_winvista_gfx.htm" class="external free" rel="nofollow">http://downloadmirror.intel.com/17040/eng/relnotes_winvista_gfx.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Release+Notes+Vista+driver+15.11.3.1576&amp;rft.atitle=&amp;rft.date=2008-08-22&amp;rft.pub=Downloadmirror.intel.com&amp;rft_id=http%3A%2F%2Fdownloadmirror.intel.com%2F17040%2Feng%2Frelnotes_winvista_gfx.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-88"><b><a href="#cite_ref-88">^</a></b> <span class="citation web"><a href="http://downloadmirror.intel.com/16944/eng/relnotes_2k_xp_gfx.htm" class="external text" rel="nofollow">"Release Notes XP driver 14.36.3.4990"</a>. Downloadmirror.intel.com<span class="printonly">. <a href="http://downloadmirror.intel.com/16944/eng/relnotes_2k_xp_gfx.htm" class="external free" rel="nofollow">http://downloadmirror.intel.com/16944/eng/relnotes_2k_xp_gfx.htm</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Release+Notes+XP+driver+14.36.3.4990&amp;rft.atitle=&amp;rft.pub=Downloadmirror.intel.com&amp;rft_id=http%3A%2F%2Fdownloadmirror.intel.com%2F16944%2Feng%2Frelnotes_2k_xp_gfx.htm&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span><sup class="noprint Inline-Template"><span title="&#160;since October 2010" style="white-space: nowrap;">[<i><a href="/wiki/Wikipedia:Link_rot" title="Wikipedia:Link rot">dead link</a></i>]</span></sup></li>
+<li id="cite_note-89"><b><a href="#cite_ref-89">^</a></b> <a href="http://downloadcenter.intel.com/Product_Filter.aspx?ProductID=3001&amp;lang=eng" class="external text" rel="nofollow">Intel Atom drivers</a></li>
+<li id="cite_note-90"><b><a href="#cite_ref-90">^</a></b> Waldock, Leo. <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/" class="external text" rel="nofollow">Asus P5E-VM HDMI motherboard</a>, Register Hardware, December 5, 2007.</li>
+<li id="cite_note-91"><b><a href="#cite_ref-91">^</a></b> <span class="citation web"><a href="http://www.intel.com/support/graphics/" class="external text" rel="nofollow">"Intel Graphics home page"</a>. Intel.com<span class="printonly">. <a href="http://www.intel.com/support/graphics/" class="external free" rel="nofollow">http://www.intel.com/support/graphics/</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+Graphics+home+page&amp;rft.atitle=&amp;rft.pub=Intel.com&amp;rft_id=http%3A%2F%2Fwww.intel.com%2Fsupport%2Fgraphics%2F&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-92"><b><a href="#cite_ref-92">^</a></b> <a href="http://softwareforums.intel.com/ISN/Community/en-US/Forums/" class="external text" rel="nofollow">Intel Software Network Forums</a></li>
+<li id="cite_note-autogenerated5-93">^ <a href="#cite_ref-autogenerated5_93-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-autogenerated5_93-1"><sup><i><b>b</b></i></sup></a> <span class="citation web"><a href="http://techreport.com/articles.x/12195/17" class="external text" rel="nofollow">"Intel's G965 Express chipset&#160;— The Tech Report&#160;— Page 17"</a>. The Tech Report<span class="printonly">. <a href="http://techreport.com/articles.x/12195/17" class="external free" rel="nofollow">http://techreport.com/articles.x/12195/17</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel%27s+G965+Express+chipset%26nbsp%3B%E2%80%94+The+Tech+Report%26nbsp%3B%E2%80%94+Page+17&amp;rft.atitle=&amp;rft.pub=The+Tech+Report&amp;rft_id=http%3A%2F%2Ftechreport.com%2Farticles.x%2F12195%2F17&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-94"><b><a href="#cite_ref-94">^</a></b> <span class="citation web"><a href="http://techreport.com/articles.x/12195/9" class="external text" rel="nofollow">"Intel's G965 Express chipset&#160;— The Tech Report&#160;— Page 9"</a>. The Tech Report<span class="printonly">. <a href="http://techreport.com/articles.x/12195/9" class="external free" rel="nofollow">http://techreport.com/articles.x/12195/9</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel%27s+G965+Express+chipset%26nbsp%3B%E2%80%94+The+Tech+Report%26nbsp%3B%E2%80%94+Page+9&amp;rft.atitle=&amp;rft.pub=The+Tech+Report&amp;rft_id=http%3A%2F%2Ftechreport.com%2Farticles.x%2F12195%2F9&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-95"><b><a href="#cite_ref-95">^</a></b> <span class="citation web"><a href="http://www.extremetech.com/article2/0,2845,2121192,00.asp" class="external text" rel="nofollow">"Intel G965 with GMA X3000 Integrated Graphics&#160;— Media Encoding and Game Benchmarks&#160;— CPUs, Boards &amp; Components by ExtremeTech"</a>. Extremetech.com<span class="printonly">. <a href="http://www.extremetech.com/article2/0,2845,2121192,00.asp" class="external free" rel="nofollow">http://www.extremetech.com/article2/0,2845,2121192,00.asp</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G965+with+GMA+X3000+Integrated+Graphics%26nbsp%3B%E2%80%94+Media+Encoding+and+Game+Benchmarks%26nbsp%3B%E2%80%94+CPUs%2C+Boards+%26+Components+by+ExtremeTech&amp;rft.atitle=&amp;rft.pub=Extremetech.com&amp;rft_id=http%3A%2F%2Fwww.extremetech.com%2Farticle2%2F0%2C2845%2C2121192%2C00.asp&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-96"><b><a href="#cite_ref-96">^</a></b> <span class="citation web"><a href="http://www.extremetech.com/article2/0,2845,2121212,00.asp" class="external text" rel="nofollow">"Intel G965 with GMA X3000 Integrated Graphics&#160;— Final Thoughts: What to Buy&#160;— CPUs, Boards &amp; Components by ExtremeTech"</a>. Extremetech.com<span class="printonly">. <a href="http://www.extremetech.com/article2/0,2845,2121212,00.asp" class="external free" rel="nofollow">http://www.extremetech.com/article2/0,2845,2121212,00.asp</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Intel+G965+with+GMA+X3000+Integrated+Graphics%26nbsp%3B%E2%80%94+Final+Thoughts%3A+What+to+Buy%26nbsp%3B%E2%80%94+CPUs%2C+Boards+%26+Components+by+ExtremeTech&amp;rft.atitle=&amp;rft.pub=Extremetech.com&amp;rft_id=http%3A%2F%2Fwww.extremetech.com%2Farticle2%2F0%2C2845%2C2121212%2C00.asp&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-97"><b><a href="#cite_ref-97">^</a></b> <span class="citation web"><a href="http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2942&amp;p=11" class="external text" rel="nofollow">"AMD 690G: Performance Review"</a>. AnandTech. 2007-03-06<span class="printonly">. <a href="http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2942&amp;p=11" class="external free" rel="nofollow">http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2942&amp;p=11</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=AMD+690G%3A+Performance+Review&amp;rft.atitle=&amp;rft.date=2007-03-06&amp;rft.pub=AnandTech&amp;rft_id=http%3A%2F%2Fwww.anandtech.com%2Fcpuchipsets%2Fshowdoc.aspx%3Fi%3D2942%26p%3D11&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-autogenerated4-98">^ <a href="#cite_ref-autogenerated4_98-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-autogenerated4_98-1"><sup><i><b>b</b></i></sup></a> <span class="citation web">Waldock, Leo (2007-12-05). <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page4.html" class="external text" rel="nofollow">"Asus P5E-VM HDMI motherboard | Register Hardware"</a>. Reghardware.co.uk<span class="printonly">. <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page4.html" class="external free" rel="nofollow">http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page4.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Asus+P5E-VM+HDMI+motherboard+%26%23124%3B+Register+Hardware&amp;rft.atitle=&amp;rft.aulast=Waldock&amp;rft.aufirst=Leo&amp;rft.au=Waldock%2C%26%2332%3BLeo&amp;rft.date=2007-12-05&amp;rft.pub=Reghardware.co.uk&amp;rft_id=http%3A%2F%2Fwww.reghardware.co.uk%2F2007%2F12%2F05%2Freview_asus_p5e_vm_hdmi%2Fpage4.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-99"><b><a href="#cite_ref-99">^</a></b> <span class="citation web">Waldock, Leo (2007-12-05). <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page3.html" class="external text" rel="nofollow">"Asus P5E-VM HDMI motherboard | Register Hardware"</a>. Reghardware.co.uk<span class="printonly">. <a href="http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page3.html" class="external free" rel="nofollow">http://www.reghardware.co.uk/2007/12/05/review_asus_p5e_vm_hdmi/page3.html</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Asus+P5E-VM+HDMI+motherboard+%26%23124%3B+Register+Hardware&amp;rft.atitle=&amp;rft.aulast=Waldock&amp;rft.aufirst=Leo&amp;rft.au=Waldock%2C%26%2332%3BLeo&amp;rft.date=2007-12-05&amp;rft.pub=Reghardware.co.uk&amp;rft_id=http%3A%2F%2Fwww.reghardware.co.uk%2F2007%2F12%2F05%2Freview_asus_p5e_vm_hdmi%2Fpage3.html&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-100"><b><a href="#cite_ref-100">^</a></b> <span class="citation web"><a href="http://www.notebookjournal.de/praxis/79/2" class="external text" rel="nofollow">"Notebook Test News auf notebookjournal.de&#160;— Praxis&#160;— Exclusive: Intel Centrino 2 Performance Test"</a>. Notebookjournal.de<span class="printonly">. <a href="http://www.notebookjournal.de/praxis/79/2" class="external free" rel="nofollow">http://www.notebookjournal.de/praxis/79/2</a></span><span class="reference-accessdate">. Retrieved 2009-09-17</span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=Notebook+Test+News+auf+notebookjournal.de%26nbsp%3B%E2%80%94+Praxis%26nbsp%3B%E2%80%94+Exclusive%3A+Intel+Centrino+2+Performance+Test&amp;rft.atitle=&amp;rft.pub=Notebookjournal.de&amp;rft_id=http%3A%2F%2Fwww.notebookjournal.de%2Fpraxis%2F79%2F2&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span></li>
+<li id="cite_note-101"><b><a href="#cite_ref-101">^</a></b> <span class="citation web"><a href="http://www.anandtech.com/show/3871/the-sandy-bridge-preview-three-wins-in-a-row/7" class="external text" rel="nofollow">"The Sandy Bridge Preview"</a><span class="printonly">. <a href="http://www.anandtech.com/show/3871/the-sandy-bridge-preview-three-wins-in-a-row/7" class="external free" rel="nofollow">http://www.anandtech.com/show/3871/the-sandy-bridge-preview-three-wins-in-a-row/7</a></span>.</span><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.btitle=The+Sandy+Bridge+Preview&amp;rft.atitle=&amp;rft_id=http%3A%2F%2Fwww.anandtech.com%2Fshow%2F3871%2Fthe-sandy-bridge-preview-three-wins-in-a-row%2F7&amp;rfr_id=info:sid/en.wikipedia.org:Intel_GMA"><span style="display: none;">&#160;</span></span>A followup identified the controller as Intel HD Graphics 3000.</li>
+</ol>
+</div>
+</div>
+<h2><span class="editsection">[<a href="/w/index.php?title=Intel_GMA&amp;action=edit&amp;section=34" title="Edit section: External links">edit</a>]</span> <span class="mw-headline" id="External_links">External links</span></h2>
+<ul>
+<li><a href="http://www.intel.com/products/graphics/" class="external text" rel="nofollow">Intel Graphics: Homepage</a></li>
+<li><a href="http://www.intel.com/design/chipsets/applnots/313343.htm" class="external text" rel="nofollow">Intel Graphics Media Accelerator X3000 and 3000 White Paper</a></li>
+<li><a href="http://www.intel.com/support/graphics/sb/CS-023606.htm" class="external text" rel="nofollow">Windows Vista* support FAQ</a>, Intel.</li>
+<li><a href="http://www.intellinuxgraphics.org/" class="external text" rel="nofollow">Linux Graphics Drivers from Intel</a></li>
+<li><a href="http://www.xbitlabs.com/articles/chipsets/display/ig965-gf6150_12.html" class="external text" rel="nofollow">Contemporary Platforms with Integrated Graphics (page 12)</a>, X-bit labs.</li>
+<li><a href="http://www.reghardware.co.uk/2006/12/15/review_intel_vs_amd_integrated/" class="external text" rel="nofollow">The Register: <i>Intel vs AMD - integrated graphics shoot-out</i></a></li>
+<li><a href="http://www.legitreviews.com/article/812/1/" class="external text" rel="nofollow">Blu-Ray Performance - Intel X4500HD Versus Radeon HD 4830</a></li>
+</ul>
+<table class="navbox" cellspacing="0" style=";">
+<tr>
+<td style="padding:2px;">
+<table cellspacing="0" class="nowraplinks collapsible uncollapsed" style="width:100%;background:transparent;color:inherit;;">
+<tr>
+<th style=";" colspan="2" class="navbox-title"><span style="float:left;width:6em;text-align:left;"><span class="noprint plainlinks navbar" style=""><span style="white-space:nowrap;word-spacing:-.12em;"><a href="/wiki/Template:Intel_processors" title="Template:Intel processors"><span style=";;background:none transparent;border:none;font-size:100%;" title="View this template">v</span></a> <span style=";;background:none transparent;border:none;font-size:100%;"><b>·</b></span> <a href="/wiki/Template_talk:Intel_processors" title="Template talk:Intel processors"><span style=";;background:none transparent;border:none;font-size:100%;" title="Discuss this template">d</span></a> <span style=";;background:none transparent;border:none;font-size:100%;"><b>·</b></span> <a href="http://en.wikipedia.org/w/index.php?title=Template:Intel_processors&amp;action=edit" class="external text" rel="nofollow"><span style=";;background:none transparent;border:none;font-size:100%;" title="Edit this template">e</span></a></span></span></span><span class="" style="font-size:110%;"><a href="/wiki/List_of_Intel_microprocessors" title="List of Intel microprocessors">Intel processors</a></span></th>
+</tr>
+<tr style="height:2px;">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">Discontinued</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks navbox-subgroup" style="width:100%;;;;">
+<tr>
+<td class="navbox-group" style=";width:12em;"><a href="/wiki/Binary-coded_decimal" title="Binary-coded decimal">BCD</a> oriented (<a href="/wiki/4-bit">4-bit</a>)</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;width:auto;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Intel_4004" title="Intel 4004">4004</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_4040" title="Intel 4040">4040</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";width:12em;">pre-x86 (<a href="/wiki/8-bit">8-bit</a>)</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;width:auto;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Intel_8008" title="Intel 8008">8008</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_8080" title="Intel 8080">8080</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_8085" title="Intel 8085">8085</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";width:12em;"><a href="/wiki/X86">x86</a>-16 (<a href="/wiki/16-bit">16-bit</a>)</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;width:auto;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Intel_8086" title="Intel 8086">8086</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_8088" title="Intel 8088">8088</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80186" title="Intel 80186">80186</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80188" title="Intel 80188">80188</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80286" title="Intel 80286">80286</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";width:12em;"><a href="/wiki/X87">x87</a> (external <a href="/wiki/Floating-point_unit" title="Floating-point unit">FPUs</a>)</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;width:auto;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><i>8/16-bit databus:</i> <span style="white-space:nowrap;"><a href="/wiki/Intel_8087" title="Intel 8087">8087</a></span>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><i>16-bit databus:</i> <span style="white-space:nowrap;"><a href="/wiki/Intel_80287" title="Intel 80287" class="mw-redirect">80287</a></span>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><i>32-bit databus:</i> <span style="white-space:nowrap;"><a href="/wiki/Intel_80387" title="Intel 80387" class="mw-redirect">80387</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80487" title="Intel 80487" class="mw-redirect">80487</a></span></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";width:12em;">x86-32/<a href="/wiki/IA-32">IA-32</a> (<a href="/wiki/32-bit">32-bit</a>)</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;width:auto;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Intel_80386" title="Intel 80386">80386</a>&#160;(<span style="white-space:nowrap;"><a href="/wiki/Intel_80386SX" title="Intel 80386SX" class="mw-redirect">SX</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80376" title="Intel 80376">376</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80386EX" title="Intel 80386EX">EX</a></span>)&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80486" title="Intel 80486">80486</a>&#160;(<span style="white-space:nowrap;"><a href="/wiki/Intel_80486SX" title="Intel 80486SX">SX</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80486DX2" title="Intel 80486DX2">DX2</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80486DX4" title="Intel 80486DX4">DX4</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80486SL" title="Intel 80486SL">SL</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/RapidCAD">RapidCAD</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_80486_OverDrive" title="Intel 80486 OverDrive">OverDrive</a></span>)&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium">Pentium</a>&#160;(<span style="white-space:nowrap;"><a href="/wiki/P5_(microarchitecture)" title="P5 (microarchitecture)">Original</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_OverDrive" title="Pentium OverDrive">OverDrive</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_Pro" title="Pentium Pro">Pro</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_II" title="Pentium II">II</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_II_OverDrive" title="Pentium II OverDrive" class="mw-redirect">II OverDrive</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_III" title="Pentium III">III</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_4" title="Pentium 4">4</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_M" title="Pentium M">M</a></span>)&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_Core" title="Intel Core">Core</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Celeron_M" class="mw-redirect" title="Celeron M">Celeron M</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Celeron_D" class="mw-redirect" title="Celeron D">Celeron D</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Stealey_(microprocessor)" title="Stealey (microprocessor)">A100/A110</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";width:12em;"><a href="/wiki/X86-64">x86-64</a>/EM64T (<a href="/wiki/64-bit">64-bit</a>)</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;width:auto;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Pentium_4#Prescott_2M_.28Extreme_Edition.29">Pentium 4</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_D">Pentium D</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_D#Smithfield_XE" title="Pentium D">Pentium Extreme Edition</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Celeron_D" class="mw-redirect" title="Celeron D">Celeron D</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_Core_2" title="Intel Core 2">Core 2</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";width:12em;">Other</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;width:auto;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Intel_iAPX_432" title="Intel iAPX 432">iAPX 432</a>&#160;<span style="font-weight:bold;">—</span></span> <span style="white-space:nowrap"><i><a href="/wiki/Reduced_instruction_set_computing" title="Reduced instruction set computing">RISC</a>:</i> <span style="white-space:nowrap;"><a href="/wiki/Intel_i860" title="Intel i860">i860</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_i960" title="Intel i960">i960</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/StrongARM">StrongARM</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/XScale">XScale</a></span></span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">Current</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><i>x86-32:</i> <span style="white-space:nowrap;"><a href="/wiki/Tolapai" title="Tolapai">EP80579</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_Consumer_Electronics" title="Intel Consumer Electronics" class="mw-redirect">Intel CE</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_Atom" title="Intel Atom">Atom</a></span>&#160;<span style="font-weight:bold;">—</span></span> <span style="white-space:nowrap"><i>x86-64:</i> <span style="white-space:nowrap;"><a href="/wiki/Intel_Atom" title="Intel Atom">Atom (some)</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Celeron">Celeron</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_(brand)" title="Pentium (brand)" class="mw-redirect">Pentium</a>&#160;(<span style="white-space:nowrap;"><a href="/wiki/Pentium_Dual-Core" title="Pentium Dual-Core">Dual-Core</a></span>)&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_Core" title="Intel Core">Core</a>&#160;(<span style="white-space:nowrap;"><a href="/wiki/Intel_Core_i3" title="Intel Core i3" class="mw-redirect">i3</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_Core_i5" title="Intel Core i5">i5</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_Core_i7" title="Intel Core i7">i7</a></span>)&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon">Xeon</a></span>&#160;<span style="font-weight:bold;">—</span></span> <span style="white-space:nowrap"><i>Other:</i> <span style="white-space:nowrap;"><a href="/wiki/XScale#IOP" title="XScale">IOP</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Itanium#Itanium_2:_2002.E2.80.932010">Itanium</a></span></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">Lists</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/CPU_socket" title="CPU socket">CPU sockets</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_CPU_power_dissipation" title="List of CPU power dissipation">CPU power dissipation</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_chipsets" title="List of Intel chipsets">Chipsets</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Platform_Controller_Hub" title="Platform Controller Hub">PCHs</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/System_Controller_Hub" title="System Controller Hub">SCHs</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/I/O_Controller_Hub" title="I/O Controller Hub">ICHs</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/PCI_IDE_ISA_Xcelerator" title="PCI IDE ISA Xcelerator">PIIXs</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_CPU_microarchitectures" title="List of Intel CPU microarchitectures">Microarchitectures</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_microprocessors" title="List of Intel microprocessors">Processors</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_future_Intel_microprocessors" title="List of future Intel microprocessors">Future Processors</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_codenames" title="List of Intel codenames">Codenames</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><strong class="selflink">GMA</strong>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><br />
+<a href="/wiki/List_of_Intel_Atom_microprocessors" title="List of Intel Atom microprocessors">Atom</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Celeron_microprocessors" title="List of Intel Celeron microprocessors">Celeron</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Core_microprocessors" title="List of Intel Core microprocessors">Core</a>&#160;(<span style="white-space:nowrap;"><a href="/wiki/List_of_Intel_Core_2_microprocessors" title="List of Intel Core 2 microprocessors">2</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Core_i3_microprocessors" title="List of Intel Core i3 microprocessors">i3</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Core_i5_microprocessors" title="List of Intel Core i5 microprocessors">i5</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Core_i7_microprocessors" title="List of Intel Core i7 microprocessors">i7</a></span>)&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Itanium_microprocessors" title="List of Intel Itanium microprocessors">Itanium</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Pentium_microprocessors" title="List of Intel Pentium microprocessors">Pentium</a>&#160;(<span style="white-space:nowrap;"><a href="/wiki/List_of_Intel_Pentium_Pro_microprocessors" title="List of Intel Pentium Pro microprocessors">Pro</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Pentium_II_microprocessors" title="List of Intel Pentium II microprocessors">II</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Pentium_III_microprocessors" title="List of Intel Pentium III microprocessors">III</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Pentium_4_microprocessors" title="List of Intel Pentium 4 microprocessors">4</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Pentium_D_microprocessors" title="List of Intel Pentium D microprocessors">D</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Pentium_M_microprocessors" title="List of Intel Pentium M microprocessors">M</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Pentium_Dual-Core_microprocessors" title="List of Intel Pentium Dual-Core microprocessors">Dual-Core</a></span>)&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/List_of_Intel_Xeon_microprocessors" title="List of Intel Xeon microprocessors">Xeon</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/Microarchitecture" title="Microarchitecture">Microarchitectures</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks navbox-subgroup" style="width:100%;;;;">
+<tr>
+<td class="navbox-group" style=";;">P5</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks collapsible autocollapse navbox-subgroup" style="width:100%;;;;">
+<tr>
+<th style=";" colspan="2" class="navbox-title"><span style="float:left;width:6em;">&#160;</span><span class="" style="font-size:100%;"><a href="/wiki/P5_(microarchitecture)" title="P5 (microarchitecture)">P5</a> based cores</span></th>
+</tr>
+<tr style="height:2px;">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/800_nanometer" title="800 nanometer">800&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/P5_(microprocessor)" title="P5 (microprocessor)" class="mw-redirect">P5</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/600_nanometer" title="600 nanometer">600&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/P54C_(microprocessor)" title="P54C (microprocessor)" class="mw-redirect">P54C</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/350_nanometer" title="350 nanometer">350&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/P54CS_(microprocessor)" title="P54CS (microprocessor)" class="mw-redirect">P54CS</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/P55C_(microprocessor)" title="P55C (microprocessor)" class="mw-redirect">P55C</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/250_nanometer" title="250 nanometer">250&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Tillamook_(microprocessor)" title="Tillamook (microprocessor)" class="mw-redirect">Tillamook</a></span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">P6</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks collapsible autocollapse navbox-subgroup" style="width:100%;;;;">
+<tr>
+<th style=";" colspan="2" class="navbox-title"><span style="float:left;width:6em;">&#160;</span><span class="" style="font-size:100%;"><span style="white-space:nowrap;"><a href="/wiki/P6_(microarchitecture)" title="P6 (microarchitecture)">P6</a>&#160;/</span> <span style="white-space:nowrap"><a href="/wiki/Pentium_M_(microarchitecture)" title="Pentium M (microarchitecture)" class="mw-redirect">Pentium M</a>&#160;/</span> <span style="white-space:nowrap"><a href="/wiki/Enhanced_Pentium_M_(microarchitecture)" title="Enhanced Pentium M (microarchitecture)" class="mw-redirect">Enhanced Pentium M</a></span> based cores</span></th>
+</tr>
+<tr style="height:2px;">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">500&#160;<a href="/wiki/Nanometre" title="Nanometre">nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Pentium_Pro" title="Pentium Pro">P6</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">350&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Pentium_Pro" title="Pentium Pro">P6</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Klamath_(microprocessor)" title="Klamath (microprocessor)" class="mw-redirect">Klamath</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">250&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Mendocino_(microprocessor)" title="Mendocino (microprocessor)" class="mw-redirect">Mendocino</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Dixon_(microprocessor)" title="Dixon (microprocessor)" class="mw-redirect">Dixon</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Tonga_(microprocessor)" title="Tonga (microprocessor)" class="mw-redirect">Tonga</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Covington_(microprocessor)" title="Covington (microprocessor)" class="mw-redirect">Covington</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Deschutes_(microprocessor)" title="Deschutes (microprocessor)" class="mw-redirect">Deschutes</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Katmai_(microprocessor)" title="Katmai (microprocessor)" class="mw-redirect">Katmai</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Drake_(microprocessor)" title="Drake (microprocessor)" class="mw-redirect">Drake</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Tanner_(microprocessor)" title="Tanner (microprocessor)" class="mw-redirect">Tanner</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/180_nanometer" title="180 nanometer">180&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Coppermine_(microprocessor)" title="Coppermine (microprocessor)" class="mw-redirect">Coppermine</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Coppermine_T_(microprocessor)" title="Coppermine T (microprocessor)" class="mw-redirect">Coppermine T</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Intel_Timna" title="Intel Timna">Timna</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Cascades_(microprocessor)" title="Cascades (microprocessor)" class="mw-redirect">Cascades</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/130_nanometer" title="130 nanometer">130&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Tualatin_(microprocessor)" title="Tualatin (microprocessor)" class="mw-redirect">Tualatin</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Banias_(microprocessor)" title="Banias (microprocessor)" class="mw-redirect">Banias</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/90_nanometer" title="90 nanometer">90&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Dothan_(microprocessor)" title="Dothan (microprocessor)" class="mw-redirect">Dothan</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Stealey_(microprocessor)" title="Stealey (microprocessor)">Stealey</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/65_nanometer" title="65 nanometer">65&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Tolapai">Tolapai</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Yonah_(microprocessor)" title="Yonah (microprocessor)">Yonah</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Sossaman_(microprocessor)" title="Sossaman (microprocessor)" class="mw-redirect">Sossaman</a></span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">NetBurst</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks collapsible autocollapse navbox-subgroup" style="width:100%;;;;">
+<tr>
+<th style=";" colspan="2" class="navbox-title"><span style="float:left;width:6em;">&#160;</span><span class="" style="font-size:100%;"><a href="/wiki/NetBurst_(microarchitecture)" title="NetBurst (microarchitecture)">NetBurst</a> based cores</span></th>
+</tr>
+<tr style="height:2px;">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">180&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Pentium_4#Willamette" title="Pentium 4">Willamette</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#Foster" title="Xeon">Foster</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">130&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Pentium_4#Northwood" title="Pentium 4">Northwood</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_4#Gallatin_.28Extreme_Edition.29" title="Pentium 4">Gallatin</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#Prestonia" title="Xeon">Prestonia</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">90&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Tejas_and_Jayhawk">Tejas and Jayhawk</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_4#Prescott" title="Pentium 4">Prescott</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_D#Smithfield" title="Pentium D">Smithfield</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#Xeon_.28DP.29_.26_Xeon_MP_.2864-bit.29" title="Xeon">Nocona</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#Xeon_.28DP.29_.26_Xeon_MP_.2864-bit.29" title="Xeon">Irwindale</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#Xeon_.28DP.29_.26_Xeon_MP_.2864-bit.29" title="Xeon">Cranford</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#Xeon_.28DP.29_.26_Xeon_MP_.2864-bit.29" title="Xeon">Potomac</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#.22Paxville_DP.22" title="Xeon">Paxville</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">65&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Pentium_4#Cedar_Mill" title="Pentium 4">Cedar Mill</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pentium_D#Presler" title="Pentium D">Presler</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#5000-series_.22Dempsey.22" title="Xeon">Dempsey</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Xeon#7100-series_.22Tulsa.22" title="Xeon">Tulsa</a></span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">Core</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks collapsible autocollapse navbox-subgroup" style="width:100%;;;;">
+<tr>
+<th style=";" colspan="2" class="navbox-title"><span style="float:left;width:6em;">&#160;</span><span class="" style="font-size:100%;"><span style="white-space:nowrap;"><a href="/wiki/Core_(microarchitecture)" title="Core (microarchitecture)">Core</a>&#160;/</span> <span style="white-space:nowrap"><a href="/wiki/Penryn_(microarchitecture)" title="Penryn (microarchitecture)" class="mw-redirect">Penryn</a></span> based cores</span></th>
+</tr>
+<tr style="height:2px;">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">65&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Merom_(microprocessor)#Merom-L" title="Merom (microprocessor)">Merom-L</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Merom_(microprocessor)" title="Merom (microprocessor)">Merom</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Conroe_(microprocessor)#Conroe-L" title="Conroe (microprocessor)">Conroe-L</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Conroe_(microprocessor)#Allendale" title="Conroe (microprocessor)">Allendale</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Conroe_(microprocessor)" title="Conroe (microprocessor)">Conroe</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Kentsfield_(microprocessor)" title="Kentsfield (microprocessor)">Kentsfield</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Woodcrest_(microprocessor)" title="Woodcrest (microprocessor)" class="mw-redirect">Woodcrest</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Clovertown_(microprocessor)" title="Clovertown (microprocessor)" class="mw-redirect">Clovertown</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Tigerton_(microprocessor)" title="Tigerton (microprocessor)" class="mw-redirect">Tigerton</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/45_nanometer" title="45 nanometer">45&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Penryn_(microprocessor)" title="Penryn (microprocessor)">Penryn</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Penryn_(microprocessor)#Penryn-QC" title="Penryn (microprocessor)">Penryn-QC</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Wolfdale_(microprocessor)" title="Wolfdale (microprocessor)">Wolfdale</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Yorkfield">Yorkfield</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Wolfdale-DP_(microprocessor)" title="Wolfdale-DP (microprocessor)" class="mw-redirect">Wolfdale-DP</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Harpertown_(microprocessor)" title="Harpertown (microprocessor)" class="mw-redirect">Harpertown</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Dunnington_(microprocessor)" title="Dunnington (microprocessor)" class="mw-redirect">Dunnington</a></span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">Bonnell</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks collapsible autocollapse navbox-subgroup" style="width:100%;;;;">
+<tr>
+<th style=";" colspan="2" class="navbox-title"><span style="float:left;width:6em;">&#160;</span><span class="" style="font-size:100%;"><a href="/wiki/Bonnell_(microarchitecture)" title="Bonnell (microarchitecture)" class="mw-redirect">Bonnell</a> based cores</span></th>
+</tr>
+<tr style="height:2px;">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">45&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Silverthorne_(microprocessor)" title="Silverthorne (microprocessor)" class="mw-redirect">Silverthorne</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Diamondville_(microprocessor)" title="Diamondville (microprocessor)" class="mw-redirect">Diamondville</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Pineview_(microprocessor)" title="Pineview (microprocessor)" class="mw-redirect">Pineview</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Lincroft_(microprocessor)" title="Lincroft (microprocessor)" class="mw-redirect">Lincroft</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Tunnel_Creek_(microprocessor)" title="Tunnel Creek (microprocessor)" class="mw-redirect">Tunnel Creek</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Sodaville_(microprocessor)" title="Sodaville (microprocessor)" class="mw-redirect">Sodaville</a></span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">Nehalem</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks collapsible autocollapse navbox-subgroup" style="width:100%;;;;">
+<tr>
+<th style=";" colspan="2" class="navbox-title"><span style="float:left;width:6em;">&#160;</span><span class="" style="font-size:100%;"><span style="white-space:nowrap;"><a href="/wiki/Nehalem_(microarchitecture)" title="Nehalem (microarchitecture)">Nehalem</a>&#160;/</span> <span style="white-space:nowrap"><a href="/wiki/Westmere_(microarchitecture)" title="Westmere (microarchitecture)" class="mw-redirect">Westmere</a></span> based cores</span></th>
+</tr>
+<tr style="height:2px;">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">45&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Clarksfield_(microprocessor)" title="Clarksfield (microprocessor)">Clarksfield</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Lynnfield_(microprocessor)" title="Lynnfield (microprocessor)">Lynnfield</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Jasper_Forest_(microprocessor)" title="Jasper Forest (microprocessor)" class="mw-redirect">Jasper Forest</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Bloomfield_(microprocessor)" title="Bloomfield (microprocessor)">Bloomfield</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Gainestown_(microprocessor)" title="Gainestown (microprocessor)" class="mw-redirect">Gainestown (Nehalem-EP)</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Beckton_(microprocessor)" title="Beckton (microprocessor)" class="mw-redirect">Beckton (Nehalem-EX)</a></span></div>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;"><a href="/wiki/32_nanometer" title="32 nanometer">32&#160;nm</a></td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Arrandale">Arrandale</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Clarkdale_(microprocessor)" title="Clarkdale (microprocessor)">Clarkdale</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><a href="/wiki/Gulftown" title="Gulftown">Gulftown (Westmere-EP)</a></span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">Sandy Bridge</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"></div>
+<table cellspacing="0" class="nowraplinks collapsible autocollapse navbox-subgroup" style="width:100%;;;;">
+<tr>
+<th style=";" colspan="2" class="navbox-title"><span style="float:left;width:6em;">&#160;</span><span class="" style="font-size:100%;"><span style="white-space:nowrap;"><a href="/wiki/Sandy_Bridge">Sandy Bridge</a>&#160;/</span> <span style="white-space:nowrap"><a href="/wiki/Ivy_Bridge_(microarchitecture)" title="Ivy Bridge (microarchitecture)" class="mw-redirect">Ivy Bridge</a></span> based cores</span></th>
+</tr>
+<tr style="height:2px;">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">32&#160;nm</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-odd">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;">Sandy Bridge</span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+<tr style="height:2px">
+<td></td>
+</tr>
+<tr>
+<td class="navbox-group" style=";;">Future</td>
+<td style="text-align:left;border-left-width:2px;border-left-style:solid;width:100%;padding:0px;;;" class="navbox-list navbox-even">
+<div style="padding:0em 0.25em"><span style="white-space:nowrap;"><a href="/wiki/Larrabee_(microarchitecture)" title="Larrabee (microarchitecture)">Larrabee</a>&#160;<span style="font-weight:bold;">·</span></span> <span style="white-space:nowrap"><span style="white-space:nowrap;"><a href="/wiki/Haswell_(microarchitecture)" title="Haswell (microarchitecture)">Haswell</a>&#160;/</span> <span style="white-space:nowrap"><a href="/wiki/Rockwell_(microarchitecture)" title="Rockwell (microarchitecture)" class="mw-redirect">Rockwell</a></span></span></div>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+
+
+<!--
+NewPP limit report
+Preprocessor node count: 50856/1000000
+Post-expand include size: 580417/2048000 bytes
+Template argument size: 339476/2048000 bytes
+Expensive parser function count: 12/500
+-->
+
+<!-- Saved in parser cache with key enwiki:pcache:idhash:2865877-0!*!0!!en!4 and timestamp 20110217194733 -->
+<div class="printfooter">
+Retrieved from "<a href="http://en.wikipedia.org/wiki/Intel_GMA">http://en.wikipedia.org/wiki/Intel_GMA</a>"</div>
+ <!-- /bodytext -->
+ <!-- catlinks -->
+ <div id='catlinks' class='catlinks'><div id="mw-normal-catlinks"><a href="/wiki/Special:Categories" title="Special:Categories">Categories</a>: <span dir='ltr'><a href="/wiki/Category:Intel_microprocessors" title="Category:Intel microprocessors">Intel microprocessors</a></span> | <span dir='ltr'><a href="/wiki/Category:Video_cards" title="Category:Video cards">Video cards</a></span></div><div id="mw-hidden-catlinks" class="mw-hidden-cats-hidden">Hidden categories: <span dir='ltr'><a href="/wiki/Category:All_articles_with_dead_external_links" title="Category:All articles with dead external links">All articles with dead external links</a></span> | <span dir='ltr'><a href="/wiki/Category:Articles_with_dead_external_links_from_November_2010" title="Category:Articles with dead external links from November 2010">Articles with dead external links from November 2010</a></span> | <span dir='ltr'><a href="/wiki/Category:Articles_with_dead_external_links_from_October_2010" title="Category:Articles with dead external links from October 2010">Articles with dead external links from October 2010</a></span> | <span dir='ltr'><a href="/wiki/Category:Articles_with_dead_external_links_from_September_2009" title="Category:Articles with dead external links from September 2009">Articles with dead external links from September 2009</a></span> | <span dir='ltr'><a href="/wiki/Category:All_articles_with_unsourced_statements" title="Category:All articles with unsourced statements">All articles with unsourced statements</a></span> | <span dir='ltr'><a href="/wiki/Category:Articles_with_unsourced_statements_from_July_2008" title="Category:Articles with unsourced statements from July 2008">Articles with unsourced statements from July 2008</a></span> | <span dir='ltr'><a href="/wiki/Category:Articles_with_unsourced_statements_from_February_2011" title="Category:Articles with unsourced statements from February 2011">Articles with unsourced statements from February 2011</a></span> | <span dir='ltr'><a href="/wiki/Category:Articles_with_unsourced_statements_from_November_2009" title="Category:Articles with unsourced statements from November 2009">Articles with unsourced statements from November 2009</a></span> | <span dir='ltr'><a href="/wiki/Category:Articles_with_unsourced_statements_from_February_2010" title="Category:Articles with unsourced statements from February 2010">Articles with unsourced statements from February 2010</a></span> | <span dir='ltr'><a href="/wiki/Category:All_articles_that_may_contain_original_research" title="Category:All articles that may contain original research">All articles that may contain original research</a></span> | <span dir='ltr'><a href="/wiki/Category:Articles_that_may_contain_original_research_from_September_2009" title="Category:Articles that may contain original research from September 2009">Articles that may contain original research from September 2009</a></span></div></div> <!-- /catlinks -->
+ <div class="visualClear"></div>
+ </div>
+ <!-- /bodyContent -->
+ </div>
+ <!-- /content -->
+ <!-- header -->
+ <div id="mw-head" class="noprint">
+
+<!-- 0 -->
+<div id="p-personal" class="">
+ <h5>Personal tools</h5>
+ <ul>
+ <li id="pt-login"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=Intel_GMA" title="You are encouraged to log in; however, it is not mandatory. [o]" accesskey="o">Log in / create account</a></li>
+ </ul>
+</div>
+
+<!-- /0 -->
+ <div id="left-navigation">
+
+<!-- 0 -->
+<div id="p-namespaces" class="vectorTabs">
+ <h5>Namespaces</h5>
+ <ul>
+ <li id="ca-nstab-main" class="selected"><span><a href="/wiki/Intel_GMA" title="View the content page [c]" accesskey="c">Article</a></span></li>
+ <li id="ca-talk"><span><a href="/wiki/Talk:Intel_GMA" title="Discussion about the content page [t]" accesskey="t">Discussion</a></span></li>
+ </ul>
+</div>
+
+<!-- /0 -->
+
+<!-- 1 -->
+<div id="p-variants" class="vectorMenu emptyPortlet">
+ <h5><span>Variants</span><a href="#"></a></h5>
+ <div class="menu">
+ <ul>
+ </ul>
+ </div>
+</div>
+
+<!-- /1 -->
+ </div>
+ <div id="right-navigation">
+
+<!-- 0 -->
+<div id="p-views" class="vectorTabs">
+ <h5>Views</h5>
+ <ul>
+ <li id="ca-view" class="selected"><span><a href="/wiki/Intel_GMA" >Read</a></span></li>
+ <li id="ca-edit"><span><a href="/w/index.php?title=Intel_GMA&amp;action=edit" title="You can edit this page. &#10;Please use the preview button before saving. [e]" accesskey="e">Edit</a></span></li>
+ <li id="ca-history" class="collapsible "><span><a href="/w/index.php?title=Intel_GMA&amp;action=history" title="Past versions of this page [h]" accesskey="h">View history</a></span></li>
+ </ul>
+</div>
+
+<!-- /0 -->
+
+<!-- 1 -->
+<div id="p-cactions" class="vectorMenu emptyPortlet">
+ <h5><span>Actions</span><a href="#"></a></h5>
+ <div class="menu">
+ <ul>
+ </ul>
+ </div>
+</div>
+
+<!-- /1 -->
+
+<!-- 2 -->
+<div id="p-search">
+ <h5><label for="searchInput">Search</label></h5>
+ <form action="/w/index.php" id="searchform">
+ <input type='hidden' name="title" value="Special:Search"/>
+ <div id="simpleSearch">
+ <input id="searchInput" name="search" type="text" title="Search Wikipedia [f]" accesskey="f" value="" />
+ <button id="searchButton" type='submit' name='button' title="Search Wikipedia for this text"><img src="http://bits.wikimedia.org/skins-1.17/vector/images/search-ltr.png?301-1" alt="Search" /></button>
+ </div>
+ </form>
+</div>
+
+<!-- /2 -->
+ </div>
+ </div>
+ <!-- /header -->
+ <!-- panel -->
+ <div id="mw-panel" class="noprint">
+ <!-- logo -->
+ <div id="p-logo"><a style="background-image: url(http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png);" href="/wiki/Main_Page" title="Visit the main page"></a></div>
+ <!-- /logo -->
+
+<!-- navigation -->
+<div class="portal" id='p-navigation'>
+ <h5>Navigation</h5>
+ <div class="body">
+ <ul>
+ <li id="n-mainpage-description"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z">Main page</a></li>
+ <li id="n-contents"><a href="/wiki/Portal:Contents" title="Guides to browsing Wikipedia">Contents</a></li>
+ <li id="n-featuredcontent"><a href="/wiki/Portal:Featured_content" title="Featured content – the best of Wikipedia">Featured content</a></li>
+ <li id="n-currentevents"><a href="/wiki/Portal:Current_events" title="Find background information on current events">Current events</a></li>
+ <li id="n-randompage"><a href="/wiki/Special:Random" title="Load a random article [x]" accesskey="x">Random article</a></li>
+ <li id="n-sitesupport"><a href="http://wikimediafoundation.org/wiki/Special:Landingcheck?landing_page=WMFJA085&amp;language=en&amp;utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=20101204SB002" title="Support us">Donate to Wikipedia</a></li>
+ </ul>
+ </div>
+</div>
+
+<!-- /navigation -->
+
+<!-- SEARCH -->
+
+<!-- /SEARCH -->
+
+<!-- interaction -->
+<div class="portal" id='p-interaction'>
+ <h5>Interaction</h5>
+ <div class="body">
+ <ul>
+ <li id="n-help"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia">Help</a></li>
+ <li id="n-aboutsite"><a href="/wiki/Wikipedia:About" title="Find out about Wikipedia">About Wikipedia</a></li>
+ <li id="n-portal"><a href="/wiki/Wikipedia:Community_portal" title="About the project, what you can do, where to find things">Community portal</a></li>
+ <li id="n-recentchanges"><a href="/wiki/Special:RecentChanges" title="The list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li>
+ <li id="n-contact"><a href="/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia">Contact Wikipedia</a></li>
+ </ul>
+ </div>
+</div>
+
+<!-- /interaction -->
+
+<!-- TOOLBOX -->
+<div class="portal" id="p-tb">
+ <h5>Toolbox</h5>
+ <div class="body">
+ <ul>
+ <li id="t-whatlinkshere"><a href="/wiki/Special:WhatLinksHere/Intel_GMA" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j">What links here</a></li>
+ <li id="t-recentchangeslinked"><a href="/wiki/Special:RecentChangesLinked/Intel_GMA" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li>
+ <li id="t-upload"><a href="/wiki/Wikipedia:Upload" title="Upload files [u]" accesskey="u">Upload file</a></li>
+ <li id="t-specialpages"><a href="/wiki/Special:SpecialPages" title="List of all special pages [q]" accesskey="q">Special pages</a></li>
+ <li id="t-permalink"><a href="/w/index.php?title=Intel_GMA&amp;oldid=414486740" title="Permanent link to this revision of the page">Permanent link</a></li>
+ <li id="t-cite"><a href="/w/index.php?title=Special:Cite&amp;page=Intel_GMA&amp;id=414486740" title="Information on how to cite this page">Cite this page</a></li> </ul>
+ </div>
+</div>
+
+<!-- /TOOLBOX -->
+
+<!-- coll-print_export -->
+<div class="portal" id='p-coll-print_export'>
+ <h5>Print/export</h5>
+ <div class="body">
+ <ul id="collectionPortletList"><li id="coll-create_a_book"><a href="/w/index.php?title=Special:Book&amp;bookcmd=book_creator&amp;referer=Intel+GMA" title="Create a book or page collection" rel="nofollow">Create a book</a></li><li id="coll-download-as-rl"><a href="/w/index.php?title=Special:Book&amp;bookcmd=render_article&amp;arttitle=Intel+GMA&amp;oldid=414486740&amp;writer=rl" title="Download a PDF version of this wiki page" rel="nofollow">Download as PDF</a></li><li id="t-print"><a href="/w/index.php?title=Intel_GMA&amp;printable=yes" title="Printable version of this page [p]" accesskey="p">Printable version</a></li></ul> </div>
+</div>
+
+<!-- /coll-print_export -->
+
+<!-- LANGUAGES -->
+<div class="portal" id="p-lang">
+ <h5>Languages</h5>
+ <div class="body">
+ <ul>
+ <li class="interwiki-cs"><a href="http://cs.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">Česky</a></li>
+ <li class="interwiki-de"><a href="http://de.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">Deutsch</a></li>
+ <li class="interwiki-fr"><a href="http://fr.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">Français</a></li>
+ <li class="interwiki-ko"><a href="http://ko.wikipedia.org/wiki/%EC%9D%B8%ED%85%94_GMA" title="인텔 GMA">한국어</a></li>
+ <li class="interwiki-hu"><a href="http://hu.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">Magyar</a></li>
+ <li class="interwiki-ja"><a href="http://ja.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">日本語</a></li>
+ <li class="interwiki-pl"><a href="http://pl.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">Polski</a></li>
+ <li class="interwiki-pt"><a href="http://pt.wikipedia.org/wiki/Intel_Graphics_Media_Accelerator_3000" title="Intel Graphics Media Accelerator 3000">Português</a></li>
+ <li class="interwiki-ru"><a href="http://ru.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">Русский</a></li>
+ <li class="interwiki-sv"><a href="http://sv.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">Svenska</a></li>
+ <li class="interwiki-zh"><a href="http://zh.wikipedia.org/wiki/Intel_GMA" title="Intel GMA">中文</a></li>
+ </ul>
+ </div>
+</div>
+
+<!-- /LANGUAGES -->
+ </div>
+ <!-- /panel -->
+ <!-- footer -->
+ <div id="footer">
+ <ul id="footer-info">
+ <li id="footer-info-lastmod"> This page was last modified on 17 February 2011 at 19:47.<br /></li>
+ <li id="footer-info-copyright">Text is available under the <a rel="license" href="http://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License">Creative Commons Attribution-ShareAlike License</a><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/" style="display:none;"></a>;
+additional terms may apply.
+See <a href="http://wikimediafoundation.org/wiki/Terms_of_Use">Terms of Use</a> for details.<br/>
+Wikipedia&reg; is a registered trademark of the <a href="http://www.wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.<br /></li><li class="noprint"><a class='internal' href="http://en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact us</a></li>
+ </ul>
+ <ul id="footer-places">
+ <li id="footer-places-privacy"><a href="http://wikimediafoundation.org/wiki/Privacy_policy" title="wikimedia:Privacy policy">Privacy policy</a></li>
+ <li id="footer-places-about"><a href="/wiki/Wikipedia:About" title="Wikipedia:About">About Wikipedia</a></li>
+ <li id="footer-places-disclaimer"><a href="/wiki/Wikipedia:General_disclaimer" title="Wikipedia:General disclaimer">Disclaimers</a></li>
+ </ul>
+ <ul id="footer-icons" class="noprint">
+ <li id="footer-copyrightico">
+ <a href="http://wikimediafoundation.org/"><img src="/images/wikimedia-button.png" width="88" height="31" alt="Wikimedia Foundation"/></a>
+ </li>
+ <li id="footer-poweredbyico">
+ <a href="http://www.mediawiki.org/"><img src="http://bits.wikimedia.org/skins-1.17/common/images/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" width="88" height="31" /></a>
+ </li>
+ </ul>
+ <div style="clear:both"></div>
+ </div>
+ <!-- /footer -->
+
+<script src="http://bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&amp;lang=en&amp;modules=startup&amp;only=scripts&amp;skin=vector" type="text/javascript"></script>
+<script type="text/javascript">if ( window.mediaWiki ) {
+ mediaWiki.config.set({"wgCanonicalNamespace": "", "wgCanonicalSpecialPageName": false, "wgNamespaceNumber": 0, "wgPageName": "Intel_GMA", "wgTitle": "Intel GMA", "wgAction": "view", "wgArticleId": 2865877, "wgIsArticle": true, "wgUserName": null, "wgUserGroups": ["*"], "wgCurRevisionId": 414486740, "wgCategories": ["All articles with dead external links", "Articles with dead external links from November 2010", "Articles with dead external links from October 2010", "Articles with dead external links from September 2009", "All articles with unsourced statements", "Articles with unsourced statements from July 2008", "Articles with unsourced statements from February 2011", "Articles with unsourced statements from November 2009", "Articles with unsourced statements from February 2010", "All articles that may contain original research", "Articles that may contain original research from September 2009", "Intel microprocessors", "Video cards"], "wgBreakFrames": false, "wgRestrictionEdit": [], "wgRestrictionMove": [], "wgSearchNamespaces": [0], "wgFlaggedRevsParams": {"tags": {"status": {"levels": 1, "quality": 2, "pristine": 3}}}, "wgStableRevisionId": null, "wgRevContents": {"error": "Unable to get content.", "waiting": "Waiting for content"}, "wgWikimediaMobileUrl": "http://en.m.wikipedia.org/wiki", "wgCollapsibleNavBucketTest": false, "wgCollapsibleNavForceNewVersion": false, "wgArticleAssessmentJUIPath": "http://bits.wikimedia.org/w/extensions-1.17/UsabilityInitiative/js/js2stopgap/jui.combined.min.js", "Geo": {"city": "", "country": ""}, "wgNoticeProject": "wikipedia"});
+}
+</script>
+<script type="text/javascript">if ( window.mediaWiki ) {
+ mediaWiki.loader.load(["mediawiki.legacy.wikibits", "mediawiki.util", "mediawiki.legacy.ajax", "mediawiki.legacy.mwsuggest", "ext.vector.collapsibleNav", "ext.vector.collapsibleTabs", "ext.vector.editWarning", "ext.vector.simpleSearch"]);
+ mediaWiki.loader.go();
+}
+</script>
+
+<script src="http://bits.wikimedia.org/w/extensions-1.17/WikimediaMobile/MobileRedirect.js?2.2" type="text/javascript"></script>
+<script src="/w/index.php?title=Special:BannerController&amp;cache=/cn.js&amp;301-1" type="text/javascript"></script>
+<script src="http://bits.wikimedia.org/en.wikipedia.org/load.php?debug=false&amp;lang=en&amp;modules=site&amp;only=scripts&amp;skin=vector&amp;version=20110217T190952Z" type="text/javascript"></script>
+<script type="text/javascript">if ( window.mediaWiki ) {
+ mediaWiki.user.options.set({"ccmeonemails":0,"cols":80,"contextchars":50,"contextlines":5,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":1,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"highlightbroken":1,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":1,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":1,"showtoolbar":1,"skin":"vector","stubthreshold":0,"thumbsize":4,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":1,"watchdefault":0,"watchdeletion":0,"watchlistdays":"3","watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"flaggedrevssimpleui":1,"flaggedrevsstable":false,"flaggedrevseditdiffs":true,"flaggedrevsviewdiffs":false,"vector-simplesearch":1,"useeditwarning":1,"vector-collapsiblenav":1,"usebetatoolbar":1,"usebetatoolbar-cgd":1,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"searchNs100":false,"searchNs101":false,"searchNs108":false,"searchNs109":false});
+ mediaWiki.loader.state({"user.options":"ready"});
+}
+</script><script type="text/javascript" src="http://geoiplookup.wikimedia.org/"></script> <!-- fixalpha -->
+ <script type="text/javascript"> if ( window.isMSIE55 ) fixalpha(); </script>
+ <!-- /fixalpha -->
+ <!-- Served by srv184 in 0.118 secs. --> </body>
+</html>
diff --git a/chip-data/intel/Intel_GMA.ods b/chip-data/intel/Intel_GMA.ods
new file mode 100644
index 0000000..fa94b03
--- /dev/null
+++ b/chip-data/intel/Intel_GMA.ods
Binary files differ
diff --git a/data/lib/bzpage.js b/data/lib/bzpage.js
new file mode 100644
index 0000000..e8b2b95
--- /dev/null
+++ b/data/lib/bzpage.js
@@ -0,0 +1,980 @@
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+"use strict";
+var bugURL = "https://bugzilla.redhat.com/show_bug.cgi?id=";
+var BTSPrefNS = "bugzilla-triage.setting.";
+
+// Shared contstants
+var NumberOfFrames = 7;
+
+// constants
+var SalmonPink = new Color(255, 224, 176); // RGB 255, 224, 176; HSL 36, 2,
+ // 85
+var ReporterColor = new Color(255, 255, 166); // RGB 255, 255, 166; HSL 60, 2,
+ // 83
+var EmptyLogsColor = new Color(0, 255, 0);
+var FullLogsColor = new Color(0, 40, 103);
+
+// global variables
+var config = {};
+var constantData = {}; // This should be probably eliminated ASAP or
+ // or done by other means. TODO
+var submitHandlerInstalled = false; // for setUpLogging
+/**
+* central handler processing messages from the main script.
+*/
+onMessage = function onMessage(msg) {
+ console.log("onMessage - incoming : msg.cmd = " + msg.cmd);
+ switch (msg.cmd) {
+ case "ReloadThePage":
+ document.location.reload(true);
+ break;
+ case "queryLocal":
+ queryInNewTab(msg.data, getComponent(), getProduct());
+ break;
+ case "CreateButtons":
+ constantData = msg.data.constData;
+ config = msg.data.config;
+ generateButtons(msg.data.instPkgs, msg.data.kNodes);
+ break;
+ case "Error":
+ alert("Error " + msg.data);
+ break;
+ case "Unhandled":
+ break;
+ default:
+ if (RHOnMessageHandler) {
+ RHOnMessageHandler(msg);
+ } else {
+ console.error("Error: unknown RPC call " + msg.toSource());
+ }
+ }
+};
+
+/**
+ * @param cmd Object with all commands to be executed
+ *
+ * PROBLEM: according to https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\
+ * /Statements/for...in there is no guaranteed order of execution of
+ * commands (i.e., key, commentObj[key] pairs) in for..in cycle.
+ * According to https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\
+ * /Operators/Special_Operators/delete_Operator#Cross-browser_issues it seems that
+ * everywhere except of Internet Explorer this should work well, but waiting
+ * impatiently when this bite us.
+ */
+function executeCommand(cmdObj) {
+ for (var key in cmdObj) {
+ centralCommandDispatch(key, cmdObj[key]);
+ }
+}
+
+/**
+ * Actual execution function
+ *
+ * @param cmdLabel String with the name of the command to be executed
+ * @param cmdParams Object with the appropriate parameters for the command
+ */
+function centralCommandDispatch (cmdLabel, cmdParams) {
+ console.log("centralCommandDispatch : cmdLabel = " + cmdLabel);
+ switch (cmdLabel) {
+ case "name":
+ break;
+ case "resolution":
+ case "product":
+ case "component":
+ case "version":
+ case "priority":
+ selectOption(cmdLabel, cmdParams);
+ break;
+ case "status":
+ selectOption("bug_status", cmdParams);
+ break;
+ case "platform":
+ selectOption("rep_platform", cmdParams);
+ break;
+ case "os":
+ selectOption("op_sys", cmdParams);
+ break;
+ case "severity":
+ selectOption("bug_severity", cmdParams);
+ break;
+ case "target":
+ selectOption("target_milestone", cmdParams);
+ break;
+ case "addKeyword":
+ addStuffToTextBox("keywords",cmdParams);
+ break;
+ case "removeKeyword":
+ removeStuffFromTextBox("keywords", cmdParams);
+ break;
+ case "addWhiteboard":
+ addStuffToTextBox("status_whiteboard",cmdParams);
+ break;
+ case "removeWhiteboard":
+ removeStuffFromTextBox("status_whiteboard",cmdParams);
+ break;
+ case "assignee":
+ changeAssignee(cmdParams);
+ break;
+ case "qacontact":
+ clickMouse("bz_qa_contact_edit_action");
+ document.getElementById("qa_contact").value = cmdParams;
+ break;
+ case "url":
+ clickMouse("bz_url_edit_action");
+ document.getElementById("bug_file_loc").value = cmdParams;
+ break;
+ // TODO dependson/blocked doesn't work. Find out why.
+ case "addDependsOn":
+ clickMouse("dependson_edit_action");
+ addStuffToTextBox("dependson", cmdParams);
+ break;
+ case "removeDependsOn":
+ clickMouse("dependson_edit_action");
+ removeStuffFromTextBox("dependson", cmdParams);
+ break;
+ case "addBlocks":
+ clickMouse("blocked_edit_action");
+ addStuffToTextBox("blocked", cmdParams);
+ break;
+ case "removeBlocks":
+ clickMouse("blocked_edit_action");
+ removeStuffFromTextBox("blocked", cmdParams);
+ break;
+ case "comment":
+ addStuffToTextBox("comment", cmdParams);
+ break;
+ case "commentIdx":
+ throw "There should be no commentIdx here at all.";
+ break;
+ case "setNeedinfo":
+ // cmdParams are actually ignored for now; we may in future
+ // distinguish different actors to be target of needinfo
+ setNeedinfoReporter();
+ break;
+ case "addCC":
+ addToCCList(cmdParams);
+ break;
+ case "queryStringOurBugzilla":
+ queryForSelection();
+ break;
+ // TODO flags, see also
+ case "commit":
+ if (cmdParams) {
+ // Directly commit the form
+ document.forms.namedItem("changeform").submit();
+ }
+ break;
+ default:
+ if (RHcentralCommandDispatch) {
+ RHcentralCommandDispatch(cmdLabel, cmdParams);
+ } else {
+ console.error("Unknown command:\n" + cmdLabel + "\nparameters:\n" + cmdParams);
+ }
+ break;
+ }
+}
+
+/**
+ * remove elements from the page based on their IDs
+ *
+ * @param doc Document object
+ * @param target String/Array with ID(s)
+ * @param remove Boolean indicating whether the node should be
+ * actually removed or just hidden.
+ * @return none
+ * TODO remove parameter could be replaced by function which would
+ * do actual activity.
+ */
+function killNodes(doc, target, remove) {
+ var targetArr = target instanceof Array ? target : target.trim().split(/[,\s]+/);
+ targetArr.forEach(function(x) {
+ if (remove) {
+ var targetNode = doc.getElementById(x);
+ targetNode.parentNode.removeChild(targetNode);
+ } else {
+ x.style.display = "none";
+ }
+ });
+}
+
+/**
+ * Change assignee of the bug
+ *
+ * @param newAssignee String with the email address of new assigneeAElement
+ * or 'default' if the component's default assignee should be used.
+ * Value null clears "Reset Assignee to default for component" checkbox
+ * @return none
+ */
+function changeAssignee (newAssignee) {
+ var defAssigneeButton = null;
+ // Previous assignee should know what's going on in his bug
+ addToCCList(getOwner());
+
+ // Optional value null
+ if (newAssignee === null) {
+ document.getElementById("set_default_assignee").removeAttribute(
+ "checked");
+ return ;
+ }
+
+ if (getDefaultAssignee) {
+ if (newAssignee === "default") {
+ var defAss = getDefaultAssignee();
+ if (defAss) {
+ newAssignee = defAss;
+ } else {
+ return ;
+ }
+ }
+ }
+
+ if (newAssignee) {
+ clickMouse("bz_assignee_edit_action");
+ document.getElementById("assigned_to").value = newAssignee;
+ document.getElementById("set_default_assignee").checked = false;
+ defAssigneeButton = document.getElementById("defassignee_btn");
+ if (defAssigneeButton) {
+ defAssigneeButton.style.display = "none";
+ }
+ }
+}
+
+/**
+ * Adds new option to the 'comment_action' scroll down box
+ *
+ * @param pkg String package name
+ * @param cmd String with the name of the command
+ * If the 'comment_action' scroll down box doesn't exist, this
+ * function will set up new one.
+ */
+function addToCommentsDropdown (cmdObj) {
+ var select = document.getElementById("comment_action");
+ if (!select) {
+ document.getElementById("comments").innerHTML +=
+ "<div id='make_bugzilla_comment_action'>" +
+ " <label for='comment_action'>Add Comment: </label>" +
+ " <select id='comment_action'>" +
+ " <option value=''>-- Select Comment from List --</option>" +
+ "</div>";
+ select = document.getElementById("comment_action");
+ select.addEventListener("change", function (evt) {
+ var value = select.options[select.selectedIndex].value;
+ log("value = " + value);
+ executeCommand(value);
+ }, false);
+ }
+
+ var opt = document.createElement("option");
+ opt.value = cmdObj;
+ opt.textContent = cmdObj.name;
+ select.appendChild(opt);
+}
+
+/**
+ * Create a A element leadink nowhere, but with listener running a callback on the click
+ *
+ * @param id String with a id to be added to the element
+ * @param text String with a string to be added as a textContent of the element
+ * @param parent Node which is a parent of the object
+ * @param callback Function to be called after clicking on the link
+ * @param params Array with parameters of the callback
+ * @param Boolean before if there should be a <br> element before.
+ * @return none
+ */
+function createDeadLink (id, text, parent, callback, params, before, covered, accesskey) {
+ params = valToArray(params);
+ var locParent = {};
+
+ // Yes, I want != here, not !==
+ if (covered != null) {
+ locParent = document.createElement(covered);
+ parent.appendChild(locParent);
+ } else {
+ locParent = parent;
+ }
+
+ var newAElem = document.createElement("a");
+ newAElem.setAttribute("id", id);
+ if (accesskey) {
+ newAElem.setAttribute("accesskey", accesskey);
+ }
+ newAElem.textContent = text;
+
+ if (typeof callback === "string") {
+ newAElem.setAttribute("href", callback);
+ } else {
+ newAElem.setAttribute("href", "");
+ newAElem.addEventListener("click", function(evt) {
+ callback.apply(null, params);
+ evt.stopPropagation();
+ evt.preventDefault();
+ }, false);
+ }
+
+ if ((before === "br") || (before === true)) {
+ locParent.appendChild(document.createElement("br"));
+ } else if (before === "dash") {
+ locParent.appendChild(document.createTextNode("\u00A0-\u00A0"));
+ }
+
+ locParent.appendChild(newAElem);
+}
+
+
+/**
+ * Generic function to add new button to the page. Actually copies new button
+ * from the old one (in order to have the same look-and-feel, etc.
+ *
+ * @param location Object around which the new button will be added
+ * @param after Boolean before or after location ?
+ * @param pkg String which package to take the command from
+ * @param id String which command to take
+ * @return none
+ */
+function createNewButton (location, after, cmdObj) {
+ try {
+ var newId = cmdObj.name.toLowerCase().replace(/[^a-z0-9]+/,"","g") + "_btn";
+ } catch (e) {
+ console.error("createNewButton : e = " + e +
+ "\ncreateNewButton : cmdObj.toSource() = " +
+ cmdObj.toSource());
+ }
+
+ // protection against double-firings
+ if (document.getElementById(newId)) {
+ console.log("Element with id " + newId + " already exists!");
+ return ;
+ }
+
+ var newButton = document.createElement("input");
+ newButton.setAttribute("id", newId);
+ newButton.setAttribute("type", "button");
+ newButton.value = cmdObj.name;
+ newButton.addEventListener("click", function(evt) {
+ executeCommand(cmdObj);
+ }, false);
+
+ var originalLocation = document.getElementById(location);
+
+ try {
+ if (after) {
+ originalLocation.parentNode.insertBefore(newButton,
+ originalLocation.nextSibling);
+ originalLocation.parentNode.insertBefore(document
+ .createTextNode("\u00A0"), newButton);
+ } else {
+ originalLocation.parentNode.insertBefore(newButton, originalLocation);
+ originalLocation.parentNode.insertBefore(document
+ .createTextNode("\u00A0"), originalLocation);
+ }
+ } catch (e) {
+ if (e instanceof TypeError) {
+ console.error("cannot find originalLocation element with id " + location);
+ } else {
+ throw e;
+ }
+ }
+}
+
+/**
+ * Generate button based on
+ */
+function generateButtons (pkgs, kNodes) {
+ var topRowPosition = "topRowPositionID";
+ var bottomRowPosition = "commit";
+
+ setUpLogging();
+
+ // =========================================================
+ if (kNodes && window.location.hostname in kNodes) {
+ var killConf = killNodes[window.location.hostname];
+ killNodes(document, killConf[0], killConf[1]);
+ }
+
+ // create anchor for the top toolbar
+ var commentBox = document.getElementById("comment");
+ var brElement = document.createElement("br");
+ brElement.setAttribute("id",topRowPosition);
+ commentBox.parentNode.normalize();
+ commentBox.parentNode.insertBefore(brElement, commentBox);
+
+ for (var pkg in pkgs) {
+ for (var cmdIdx in pkgs[pkg]) {
+ var cmdObj = pkgs[pkg][cmdIdx];
+ if (cmdObj.position !== undefined) {
+ switch (cmdObj.position) {
+ case "topRow":
+ createNewButton(topRowPosition, false, cmdObj);
+ break;
+ case "bottomRow":
+ createNewButton(bottomRowPosition, false, cmdObj);
+ break;
+ case "dropDown":
+ addToCommentsDropdown(cmdObj);
+ break;
+ default: // [+-]ID
+ var firstChr = cmdObj.position.charAt(0);
+ var newId = cmdObj.position.substr(1);
+ createNewButton(newId, firstChr === "+", cmdObj);
+ break;
+ }
+ } else {
+ console.error("generateButtons : rejected cmdObj = " +
+ cmdObj.toSource());
+ }
+ }
+ }
+ // TODO This is weird in this place, but that's the place where all constantData etc.
+ // are finally defined and available.
+ if (RHBZinit) {
+ RHBZinit();
+ }
+}
+
+function setConfigurationButton () {
+ var additionalButtons = document.querySelector("#bugzilla-body *.related_actions");
+ var configurationButtonUI = document.createElement("li");
+ configurationButtonUI.innerHTML = "\u00A0-\u00A0<a href='' id='configurationButton'>"
+ + "Triage configuration</a>";
+ additionalButtons.appendChild(configurationButtonUI);
+ document.getElementById("configurationButton").addEventListener(
+ "click",
+ function(evt) {
+ postMessage(new Message("ChangeJSONURL", null));
+ evt.stopPropagation();
+ evt.preventDefault();
+ }, false);
+}
+
+/**
+ * Get the current title of the bug
+ *
+ * @return string
+ */
+function getSummary() {
+ return document.getElementById("short_desc_nonedit_display").textContent;
+}
+
+/**
+ * Get the current email of the reporter of the bug.
+ *
+ * @return string
+ */
+function getReporter () {
+ var reporterElement = getOptionTableCell("bz_show_bug_column_2", "Reported");
+ // RH Bugzilla after upgrade to 3.6.2 moved the information to other column
+ if (!reporterElement) {
+ reporterElement = getOptionTableCell("bz_show_bug_column_1", "Reported", true);
+ }
+ // Maemo calls the label "Reporter" and it doesn't have ids on table columns ... TODO(maemo)
+ return parseMailto(reporterElement);
+}
+
+function getComponent() {
+ var elem = document.getElementById("component");
+ if (elem) {
+ return elem.value;
+ }
+ return null;
+}
+
+function getProduct() {
+ var elem = document.getElementById("product");
+ if (elem) {
+ return elem.value;
+ }
+ return null;
+}
+
+function commentsWalker (fce) {
+ var comments = document.getElementById("comments").
+ getElementsByClassName("bz_comment");
+ Array.forEach(comments, function(item) {
+ fce(item);
+ });
+}
+
+/**
+ * Set background color of all comments made by reporter in ReporterColor color
+ *
+ */
+function checkComments () {
+ var reporterRE = new RegExp(getReporter());
+ commentsWalker(function(x) {
+ var email = parseMailto(x.getElementsByClassName("vcard")[0]
+ .getElementsByTagName("a")[0]);
+ if (reporterRE.test(email)) {
+ x.style.backgroundColor = ReporterColor.toString();
+ }
+ });
+}
+
+function collectComments () {
+ var outStr = "";
+ commentsWalker(function(x) {
+ outStr += x.getElementsByTagName("pre")[0].textContent + "\n";
+ });
+ return outStr.trim();
+}
+
+
+/**
+ * Select option with given value on the <SELECT> element with given id.
+ *
+ * Also execute change HTMLEvent, so that the form behaves accordingly.
+ *
+ * @param id
+ * @param label
+ * @return none
+ *
+ */
+function selectOption (id, label, fireEvent) {
+ if (!fireEvent) {
+ fireEvent = true;
+ }
+ var sel = document.getElementById(id);
+ sel.value = label;
+ if (fireEvent) {
+ var intEvent = document.createEvent("HTMLEvents");
+ intEvent.initEvent("change", true, true);
+ sel.dispatchEvent(intEvent);
+ }
+}
+
+function selectOptionByLabel(id, label, fireEvent) {
+ if (!fireEvent) {
+ fireEvent = true;
+ }
+ var sel = document.getElementById(id);
+ var labelRE = new RegExp(label.trim());
+ var ourOption = Array.filter(sel.options, function (op) {
+ return op.textContent.trim() === label;
+ });
+
+ if (ourOption[0]) {
+ sel.value = ourOption[0].value;
+ }
+
+ if (fireEvent) {
+ var intEvent = document.createEvent("HTMLEvents");
+ intEvent.initEvent("change", true, true);
+ sel.dispatchEvent(intEvent);
+ }
+}
+
+/**
+ * Send mouse click to the specified element
+ *
+ * @param String ID of the element to send mouseclick to
+ * @return None
+ */
+function clickMouse (targetID) {
+ var localEvent = document.createEvent("MouseEvents");
+ localEvent.initMouseEvent("click", true, true, document.defaultView, 0, 0,
+ 0, 0, 0, false, false, false, false, 0, null);
+ document.getElementById(targetID).dispatchEvent(localEvent);
+}
+
+/**
+ * Add object to the text box (comment box or status whiteboard)
+ *
+ * @param id String with the id of the element
+ * @param stuff String/Array to be added to the comment box
+ *
+ * @return none
+ */
+function addStuffToTextBox (id, stuff) {
+ var textBox = document.getElementById(id);
+ if (textBox.tagName.toLowerCase() === "textarea") {
+ stuff = textBox.value ? "\n\n" + stuff : stuff;
+ textBox.value += stuff;
+ } else {
+ textBox.value = addCSVValue(textBox.value,stuff);
+ }
+}
+
+/**
+ * Remove a keyword from the element if it is there
+ *
+ * @param id String with the id of the element
+ * @param stuff String/Array with keyword(s) to be removed
+ */
+function removeStuffFromTextBox (id, stuff) {
+ var changedElement = document.getElementById(id);
+ changedElement.value = removeCSVValue(changedElement.value,stuff);
+}
+
+/**
+ * generalized hasKeyword ... search in the value of the box with given id
+ *
+ * @param id String with ID of the element we want to check
+ * @param str String to be searched for
+ * @return Boolean found?
+ */
+function idContainsWord (id, str) {
+ var kwd = "";
+ try {
+ kwd = document.getElementById(id).value;
+ } catch (e) {
+ // For those who don't have particular element at all or if it is empty
+ return false;
+ }
+ return (isInList(str, kwd.trim().split(/[,\s]+/)));
+}
+
+/**
+ * Check for the presence of a keyword
+ *
+ * @param str String with the keyword
+ * @return Boolean
+ */
+function hasKeyword (str) {
+ return (idContainsWord('keywords', str));
+}
+
+/**
+ * dd
+ *
+ * @return Element with the href attribute containng the information
+ */
+function getOptionTableCell(tableId, label) {
+ var cleanLabelRE = new RegExp("^\\s*([^.:]*):?\\s*$");
+ label = label.trim().replace(cleanLabelRE,"$1").toLowerCase();
+
+ var rows = document.getElementById(tableId).getElementsByTagName("tr");
+ var ourLine = Array.filter(rows, function(row) {
+ var curLabel = row.getElementsByTagName("td")[0].textContent.toLowerCase();
+ curLabel = curLabel.replace(cleanLabelRE,"$1");
+ return (curLabel === label); // maybe this could be a RE match instead
+ });
+
+ if (ourLine.length > 0) {
+ return ourLine[0].getElementsByTagName("td")[1].
+ getElementsByTagName("a")[0];
+ }
+ return null;
+}
+
+/**
+ * Set the bug to NEEDINFO state
+ *
+ * Working function.
+ * @return none
+ * @todo TODO we may extend this to general setNeedinfo function
+ * with parameter [reporter|assignee|general-email-address]
+ */
+function setNeedinfoReporter () {
+ clickMouse("needinfo");
+ selectOption("needinfo_role", "reporter");
+}
+
+/**
+ *
+ */
+function getOwner () {
+ // TODO(maemo) doesn't work on maemo
+ var assigneeAElement = getOptionTableCell("bz_show_bug_column_1","Assigned To");
+ return parseMailto(assigneeAElement);
+}
+
+/**
+ * Return maintainer which is per default by bugzilla
+ * (which is not necessarily the one who is default maintainer per component)
+ *
+ * @return String with the maintainer's email address
+ */
+function getDefaultBugzillaMaintainer (component) {
+ var address = filterByRegexp(constantData.defBugzillaMaintainerArr, component);
+ return address;
+}
+
+/**
+ * Parse the row with the attachment
+ *
+ * @param DOM element to be parsed
+ * @return array with string name of the attachment, integer its id number,
+ * string of MIME type, integer of size in kilobytes, and the whole
+ * element itself
+ *
+ * TODO error handling is missing ... it's bleee
+ */
+function parseAttachmentLine(inElem) {
+ var MIMEtype = "";
+ var size = 0;
+
+ // Skip over obsolete attachments
+ if (inElem.getElementsByClassName("bz_obsolete").length > 0) {
+ return ([]);
+ }
+
+ // getting name of the attachment
+ var attName = inElem.getElementsByTagName("b")[0].textContent.trim();
+
+ // TODO probably could use url.URL object
+ var aHrefsArr = inElem.getElementsByTagName("a");
+ var aHref = Array.filter(aHrefsArr, function(x) {
+ return x.textContent.trim() === "Details";
+ })[0];
+ var id = parseURL(aHref.getAttribute("href")).params.id;
+
+ // getting MIME type and size
+ var stringArray = inElem.getElementsByClassName("bz_attach_extra_info")[0].textContent.
+ replace(/[\n ()]+/g, " ").trim().split(", ");
+ size = parseInt(stringArray[0], 10);
+ MIMEtype = stringArray[1].split(" ")[0];
+
+ return [ attName, id, MIMEtype, size, inElem ];
+}
+
+/**
+ * collect the list of attachments in a structured format
+ *
+ * @return Array of arrays, one for each attachments;
+ * each record has string name of the attachment, integer its id number,
+ * string of MIME type, integer of size in kilobytes, and the whole
+ * element itself
+ */
+function getAttachments () {
+ var outAtts = [];
+ var atts = document.getElementById("attachment_table").
+ getElementsByTagName("tr");
+ for ( var i = 1, ii = atts.length - 1; i < ii; i++) {
+ outAtts.push(parseAttachmentLine(atts[i]));
+ }
+ return outAtts;
+}
+
+/**
+ * Get login of the currently logged-in user.
+ *
+ * @return String with the login name of the currently logged-in user
+ */
+function getLogin () {
+ var lastLIElement = document.querySelector("#header ul.links li:last-of-type");
+ var loginArr = lastLIElement.textContent.split("\n");
+ var loginStr = loginArr[loginArr.length - 1].trim();
+ return loginStr;
+}
+
+function addLogRecord() {
+ var rec = {};
+ rec.date = new Date();
+ rec.url = document.location.toString();
+ rec.title = document.title;
+ var comment = window.prompt(
+ "Enter comments for this comment");
+ if (comment) {
+ if (comment.length > 0) {
+ comment = comment.trim();
+ rec.comment = comment;
+ var dateStr = getISODate(rec.date);
+ var urlStr = window.location.hostname;
+ var bugNo = getBugNoFromURL(window.location.href);
+ rec.key = dateStr + "+" +
+ urlStr + "+" + bugNo;
+ postMessage(new Message("AddLogRecord", rec));
+ }
+ return rec;
+ }
+ return null;
+}
+
+/**
+ */
+function setUpLogging () {
+ // Protection against double-call
+ if (document.getElementById("generateTSButton")) {
+ return ;
+ }
+
+ // For adding additional buttons to the top toolbar
+ var additionalButtons = document.querySelector("#bugzilla-body *.related_actions");
+ var that = this;
+
+ // logging all submits for timesheet
+ if (!submitHandlerInstalled) {
+ document.forms.namedItem("changeform").addEventListener("submit",function (evt) {
+ if (addLogRecord() === null) {
+ evt.stopPropagation();
+ evt.preventDefault();
+ }
+ }, false);
+ submitHandlerInstalled = true;
+ }
+
+ // (id, text, parent, callback, params, before, covered, accesskey)
+ createDeadLink("generateTSButton", "Generate TS", additionalButtons,
+ function(evt) {
+ postMessage(new Message("GenerateTS"));
+ }, [], "dash", "li");
+
+ createDeadLink("clearLogs", "Clear TS", additionalButtons,
+ function(evt) {
+ postMessage(new Message("ClearTS"));
+ }, [], "dash", "li");
+
+ createDeadLink("importTSButton", "Import TS", additionalButtons,
+ function(evt) {
+ postMessage(new Message("ImportTS"));
+ }, [], "dash", "li");
+
+ /* TODO
+ var clearLogAElem = document.getElementById("clearLogs");
+ if (this.log.isEmpty()) {
+ clearLogAElem.style.color = this.log.EmptyLogsColor;
+ clearLogAElem.style.fontWeight = "normal";
+ } else {
+ clearLogAElem.style.color = this.log.FullLogsColor;
+ clearLogAElem.style.fontWeight = "bolder";
+ }
+ */
+}
+
+function getSelection () {
+ var text = "";
+ var selectionObject = window.getSelection();
+ if (selectionObject.rangeCount > 0) {
+ text = selectionObject.getRangeAt(0).toString().trim();
+ }
+ return text;
+}
+
+/**
+ * Opens a new tab with a query for the given text in the selected component
+ *
+ * @param text to be searched for
+ * @param component String with the component name (maybe latter regexp?)
+ * @param product (optional) string with the product name, if undefined,
+ * search in all products
+ * @return None
+ *
+ */
+function queryInNewTab(text, component, product) {
+ var urlStr = "https://" + window.location.hostname + "/buglist.cgi?query_format=advanced";
+ if (product) {
+ urlStr += "&product=" + product.trim();
+ }
+ if (component) {
+ if ("equivalentComponents" in constantData) {
+ var equivCompsArr = constantData.equivalentComponents.
+ filter(function (REstr) {
+ return new RegExp(REstr).test(getComponent());
+ }, this);
+ if (equivCompsArr.length > 0) {
+ component = equivCompsArr[0];
+ }
+ }
+ urlStr += "&component=" + component.trim();
+ }
+
+ // using more complicated query tables here, because they can be more easily
+ // edited
+ // for further investigative searches
+ if (text) {
+ text = encodeURIComponent(text.trim());
+ var searchText = "&field1-0-0=longdesc&type1-0-0=substring&value1-0-0="
+ + text
+ + "&field1-0-1=attach_data.thedata&type1-0-1=substring&value1-0-1="
+ + text
+ + "&field1-0-2=status_whiteboard&type1-0-2=substring&value1-0-2="
+ + text;
+ urlStr += searchText;
+ postMessage(new Message("OpenURLinTab", urlStr));
+ }
+}
+
+/**
+ * Get the text to search for and prepare other things for the real executive
+ * function this.queryInNewTab, and run it.
+ */
+function queryForSelection() {
+ var text = getSelection();
+ if (!text) {
+ postMessage(new Message("GetClipboard", "queryLocal"));
+ } else {
+ queryInNewTab(text, getComponent(), getProduct());
+ }
+}
+
+/**
+ * adds a person to the CC list, if it isn't already there
+ *
+ * @param who String with email address or "self" if the current user
+ * of the bugzilla should be added
+ */
+function addToCCList (who) {
+ if (!who) {
+ return ;
+ }
+ if (who === "self") {
+ document.getElementById("addselfcc").checked = true;
+ } else {
+ clickMouse("cc_edit_area_showhide");
+ if (!isInList(who, getCCList())) {
+ addStuffToTextBox("newcc",who);
+ }
+ }
+}
+
+/**
+ * a collect a list of emails on CC list
+ *
+ * @return Array with email addresses as Strings.
+ */
+function getCCList () {
+ var CCListSelect = document.getElementById("cc");
+ var outCCList = [];
+ if (CCListSelect) {
+ outCCList = Array.map(CCListSelect.options, function(item) {
+ return item.value;
+ });
+ }
+ return outCCList;
+}
+
+function startup() {
+ // First, preflight check ... if we are not logged in, there
+ // is nothing we can do.
+ var logoutLink = Array.some(document.links, function (x) {
+ return x.search === "?logout=1" ;
+ });
+ if (!logoutLink) {
+ return null; // This should just finish whole content script without
+ // doing any harm to anybody.
+ }
+
+ // Prepare for query buttons
+ // element ID brElementPlace_location is later used in JSON files
+ // Stay with this add_comment element even if RH BZ upgrades, this seems
+ // to be generally much more stable (even with other bugzillas, e.g. b.gnome.org)
+ // then some getElementById.
+ var commentArea = document.getElementsByName("add_comment")[0].parentNode;
+ if (commentArea) {
+ var brElementPlacer = commentArea.getElementsByTagName("br");
+ brElementPlacer = brElementPlacer[0];
+ if (brElementPlacer) {
+ brElementPlacer.setAttribute("id","brElementPlacer_location");
+ brElementPlacer.parentNode.insertBefore(document.createElement("br"),
+ brElementPlacer);
+ }
+ }
+
+ // TODO Probably could be ignored ... used only once on line 973 of rhbzpage.js
+ // if (parseAbrtBacktraces && this.RE.Abrt.test(getSummary())) {
+ // title = document.getElementById("short_desc_nonedit_display").textContent;
+
+ // So, now we know we are logged in, so we can get to
+ // the real work.
+ setConfigurationButton();
+ submitHandlerInstalled = false;
+
+ checkComments();
+
+ postMessage(new Message("GetInstalledPackages", {
+ location: window.location.href,
+ login: getLogin()
+ }));
+}
+
+startup();
diff --git a/lib/color.js b/data/lib/color.js
index 574ad19..c6cdc71 100644
--- a/lib/color.js
+++ b/data/lib/color.js
@@ -6,7 +6,7 @@
// originally from
// http://www.mjijackson.com/2008/02\
// /rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
-var Color = exports.Color = function Color(r, g, b) {
+function Color(r, g, b) {
this.Luminosity = 0.85;
this.Desaturated = 0.4;
@@ -19,7 +19,7 @@ var Color = exports.Color = function Color(r, g, b) {
this.g = g;
this.b = b;
}
-};
+}
Color.prototype.update = function(r, g, b) {
this.r = r;
diff --git a/data/lib/rhbzpage.js b/data/lib/rhbzpage.js
new file mode 100644
index 0000000..8d52174
--- /dev/null
+++ b/data/lib/rhbzpage.js
@@ -0,0 +1,960 @@
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+"use strict";
+var titleParsedAttachment = "Part of the thread where crash happened";
+
+
+// For identification of graphics card
+var manuChipStrs = [ [ "ATI Radeon", "ATI", "1002" ],
+ [ "ATI Mobility Radeon", "ATI", "1002" ],
+ [ "Intel Corporation", "INTEL", "8086" ], [ "NVIDIA", "NV", "10de" ] ];
+
+// http://en.wikipedia.org/wiki/HSL_color_space
+// when only the value of S is changed
+// stupido!!! the string is value in hex for each color
+var RHColor = new Color(158, 41, 43); // RGB 158, 41, 43; HSL 359, 1, 39
+var FedoraColor = new Color(0, 40, 103); // RGB 0, 40, 103; HSL 359, 1, 39
+var RawhideColor = new Color(0, 119, 0); // or "green", or RGB 0, 119, 0, or
+ // HSL
+// 120, 0, 23
+var RHITColor = new Color(102, 0, 102); // RGB 102, 0, 102; HSL 300, 0, 20
+
+// [ 126.386] (--) NOUVEAU(0): Chipset: "NVIDIA NVaf"
+var logAnalyzeLogic = {
+ "AnalyzeInterestingLine": {
+ /*
+ [ 126.378] (--) PCI:*(0:4:0:0) 10de:08a0:106b:00c2 rev 162, Mem @ 0xd2000000/16777216, \
+ 0xc0000000/268435456, 0xd0000000/33554432, I/O @ 0x00001000/128, BIOS @ 0x????????/131072
+ */
+ re: [
+ "^\\[[ .0-9]+\\]\\s*\\(--\\) PCI:\\*\\([0-9:]+\\)\\s*" +
+ "([0-9a-f:]+).*$",
+ "^\\s*\\[?[ 0-9.]*\\]?\\s*\\(--\\) "+
+ "([A-Za-z]+)\\([0-9]?\\): Chipset: (.*)$",
+ ],
+ func: chipsetMagic
+ },
+ /*
+ [ 126.385] (WW) Falling back to old probe method for vesa
+ [ 126.385] (WW) Falling back to old probe method for fbdev
+ [ 126.386] (--) NOUVEAU(0): Chipset: "NVIDIA NVaf"
+ Backtrace:
+ */
+ "AnalyzeXorgLogBacktrace": {
+ re: "^\\s*(\\[[0-9 .]*\\])?\\s*(\\((EE|WW)\\)|.* [cC]hipset:.*)|\\s*Backtrace",
+ func: analyzeXorg
+ }
+};
+
+var ProfessionalProducts = [
+ "Red Hat Enterprise Linux",
+ "Red Hat Enterprise MRG"
+];
+
+// END OF CONSTANTS
+
+var btSnippet = null;
+var reqCounter = 0; // TODO should be probably a dict indexed by called method
+
+function RHOnMessageHandler(msg) {
+ switch (msg.cmd) {
+ case "Error":
+ alert("Error " + msg.data);
+ break;
+ case "Unhandled":
+ break;
+ case "AddAttachmentCallback":
+ addAttachmentCallback(msg.data);
+ break;
+ case "FixAttachmentMIMECallback":
+ XMLRPCcallback();
+ break;
+ case "AnalyzeInterestingLine":
+ case "AnalyzeXorgLogBacktrace":
+ findInterestingLine(msg.data, msg.cmd);
+ break;
+ case "queryUpstream":
+ queryUpstreamCallback(msg.data);
+ break;
+ default:
+ console.error("Error: unknown RPC call " + msg.toSource());
+ break;
+ }
+}
+
+// RHBugzillaPage object
+
+/**
+ * Find default assignee based on the current component
+ *
+ * @return String what would be a default assignee if
+ * we haven't set it up.
+ */
+function getDefaultAssignee() {
+ return filterByRegexp(constantData.defaultAssignee,
+ getComponent()).toLowerCase();
+}
+
+/**
+ * Set default assignee
+ *
+ * @return none
+ * sets this.defaultAssignee property according to defaultAssignee list
+ */
+function setDefaultAssignee() {
+ var defAss = getDefaultAssignee();
+
+ // Add setting default assignee
+ if ((defAss.length > 0) && (defAss !== getOwner())) {
+ createNewButton("bz_assignee_edit_container",true, {
+ "name": "Def. Assignee",
+ "assignee": "default"
+ });
+ }
+}
+
+/**
+ * Auxiliary function to compute more complicated resolution
+ */
+function closeSomeRelease() {
+ // for RAWHIDE close as RAWHIDE,
+ // if active selection -> CURRENTRELEASE
+ // and put the release version to
+ // "Fixed in Version" textbox
+ // otherwise -> NEXTRELEASE
+ selectOption("bug_status", "CLOSED");
+ var text = getSelection();
+ var resolution = "";
+
+ if (text.length > 0) {
+ resolution = "CURRENTRELEASE";
+ document.getElementById("cf_fixed_in").value = text;
+ } else if (document.getElementById("version").value === "rawhide") {
+ resolution = "RAWHIDE";
+ } else {
+ resolution = "NEXTRELEASE";
+ }
+ centralCommandDispatch("resolution", resolution);
+}
+
+/**
+ * Additional commands specific for this subclass, overriding superclass one.
+ */
+function RHcentralCommandDispatch(cmdLabel, cmdParams) {
+ switch (cmdLabel) {
+ // Set up our own commands
+ case "closeUpstream":
+ addClosingUpstream();
+ break;
+ case "computeResolution":
+ closeSomeRelease();
+ break;
+ case "queryStringUpstreamBugzilla":
+ queryUpstream();
+ break;
+ case "sendBugUpstream":
+ sendBugUpstream();
+ break;
+ case "markTriaged":
+ markBugTriaged();
+ break;
+ case "chipMagic":
+ fillInWhiteBoard(cmdParams);
+ break;
+ // If we don't have it here, call superclass method
+ default:
+ console.error("Unknown command:\n" + cmdLabel + "\nparameters:\n" + cmdParams);
+ break;
+ }
+}
+
+function addAttachmentCallback(resp) {
+ var newAttachID = parseInt(resp.params.param.value.array.data.value.int, 10);
+ console.log("attachID = " + newAttachID);
+ // FIXME callback.call(param, newAttachID, data.length);
+}
+
+/**
+ *
+ * This has to stay in RHBugzillaPage because upstream doesn't have addAttachment
+ * XML-RPC call yet.
+ */
+function addAttachment(data, callback, param) {
+ var params = [];
+
+ if (!constantData.passwordState.passAvailable) {
+ console.error("addAttachment : No password, no XML-RPC calls; sorry");
+ return null;
+ }
+
+ params.push(getBugNo());
+ params.push({
+ description: titleParsedAttachment,
+ filename: "parsed-backtrace.txt",
+ contenttype: "text/plain",
+ data: window.btoa(data),
+ nomail: true
+ });
+
+ postMessage(new Message("MakeXMLRPCall", {
+ url: constantData.XMLRPCData[window.location.hostname].url,
+ login: getLogin(),
+ method: "bugzilla.addAttachment",
+ params: params,
+ callRPC: "AddAttachmentCallback"
+ }));
+ reqCounter++;
+}
+
+/* === Bugzilla functions === */
+/**
+ *
+ */
+function pasteBacktraceInComments(atts) {
+ /*
+ Let's comment it out, and we'll see if anything breaks.
+ TODO This paragraph looks suspicous ... what is it?
+ Does it belong to this function?
+ var notedLabel = document.querySelector("label[for='newcc']");
+ while (notedLabel.firstChild) {
+ var node = notedLabel.removeChild(notedLabel.firstChild);
+ notedLabel.parentNode.insertBefore(node, notedLabel);
+ }
+ notedLabel.parentNode.removeChild(notedLabel);
+ */
+
+ // FIXME BROKEN and its depending functions are even more broken
+ return null;
+
+ var abrtQueryURL = "https://bugzilla.redhat.com/buglist.cgi?" +
+ "cmdtype=dorem&remaction=run&namedcmd=all%20NEW%20abrt%20crashes&"+
+ "sharer_id=74116";
+
+ var mainTitle = document
+ .getElementsByClassName("bz_alias_short_desc_container")[0];
+
+ createDeadLink ("callAbrtQuery_link",
+ "Abrt bugs", mainTitle, abrtQueryURL, [], false, null, "a");
+
+ if (idContainsWord("cf_devel_whiteboard", 'btparsed')) {
+ addStuffToTextBox('status_whiteboard', 'btparsed');
+ }
+
+ if (!(isTriaged() || idContainsWord("status_whiteboard",
+ 'btparsed') || (atts.length > 0))) {
+ var btAttachments = atts
+ .filter(function(att) {
+ return (/File: backtrace/.test(att[0]));
+ });
+ // TODO we need to go through all backtrace attachments, but
+ // just the first one will do for now, we would need to do async
+ // parsing
+ btAttachments.forEach(function(x) {
+ var attURL = "https://bugzilla.redhat.com/attachment.cgi?id="
+ + x[1];
+ if ((!btSnippet) && // ???? FIXME
+ (!idContainsWord("status_whiteboard", 'btparsed'))) {
+ Request({
+ url: attURL,
+ onComplete: function(response) {
+ if (response.status == 200) {
+ btSnippet = parseBacktrace(response.text);
+ if (btSnippet) {
+ addCheckShowLink(x,btSnippet);
+ }
+ }
+ }
+ }).get();
+ }
+ }, this);
+ }
+ // Add "show BT" links
+ if (parsedAttachments.length > 0) {
+ this.parsedAttachments.forEach(function (att) {
+ addShowParsedBTLink(att);
+ });
+ }
+}
+
+/**
+ * Open new window with the content of the attachment.
+ *
+ * @param id Number of the attachment id
+ * @return none
+ */
+function showAttachment(id) {
+ postMessage(new Message("OpenURLinPanel",
+ "https://" + window.location.hostname + "/attachment.cgi?id=" + id));
+}
+
+/**
+ * add a link opening a window with the parsed backtrace
+ *
+ * @param att Attachment object
+ */
+function addShowParsedBTLink(att) {
+ var elem = att[4].querySelector("td:last-of-type");
+ createDeadLink("showParsedBacktraceWindow-" + att[1], "showBT",
+ elem, showAttachment, att[1], true);
+}
+
+/**
+ * Unfinished ... see above FIXME BROKEN AND DOESN'T WORK
+ */
+function addNewAttachmentRow(origAtt,
+ newAttId, newAttSize) {
+ var that = this;
+ var oldAddBTLink = document.getElementById("attachBacktraceActivator");
+ oldAddBTLink.parentNode.removeChild(oldAddBTLink);
+ var newTRElem = origAtt[4].cloneNode(true);
+
+ // fix number of the attachment
+ Array.forEach(newTRElem.getElementsByTagName("a"), function (aEl) {
+ aEl.setAttribute("href",
+ aEl.getAttribute("href").replace(origAtt[1], newAttId));
+ });
+
+ var aElements = newTRElem.getElementsByTagName("a");
+ aElements[0].setAttribute("name","parsed-backtrace.txt");
+ aElements[0].getElementsByTagName("b")[0].textContent = titleParsedAttachment;
+
+ var sizeSpan = newTRElem.getElementsByClassName("bz_attach_extra_info")[0];
+ sizeSpan.textContent = "(" + (newAttSize / 1024).toFixed(2) + " KB, text/plain)";
+
+ // aElements[1].textContent = new Date().toString(); TODO we should add eventually, but not pressing
+
+ var vcardSpan = newTRElem.getElementsByClassName("vcard")[0];
+ if (vcardSpan !== undefined) {
+ var vcardSpanClassList = vcardSpan.classList;
+ if (/@redhat\.com/.test(this.login) && !vcardSpanClassList.contains("redhat_user")) {
+ vcardSpanClassList.add("redhat_user");
+ }
+ var vcardAElem = vcardSpan.getElementsByTagName("a")[0];
+ vcardAElem.setAttribute("title", this.login);
+ vcardAElem.setAttribute("href", "mailto:" + this.login);
+ vcardAElem.className = "email";
+ vcardAElem.innerHTML="<span class='fn'>" + this.login + "</span>";
+ }
+
+ var elem = newTRElem.querySelector("td:last-of-type");
+ this.createDeadLink("showBacktrace", "show BT", elem,
+ this.showAttachment, newAttId, false);
+
+ origAtt[4].parentNode.insertBefore(newTRElem, origAtt[4].nextSibling);
+}
+
+/**
+ * Add a link to create a new attachment with a parsed backtrace
+ *
+ * @param oldAtt Object with an attachment row
+ * @param snippet String with parsed backtrace
+ * @return none
+ */
+function addCheckShowLink(oldAtt, snippet) {
+ var elem = oldAtt[4].querySelector("td:last-of-type");
+/*
+ createDeadLink("attachBacktraceActivator", "add parsed BT", elem, function(x) {
+ // pass function and parameters as two separate parameters, the function to be called from
+ // addAttachment
+ addAttachment(snippet, addNewAttachmentRow, oldAtt);
+ }, [], true);
+*/
+}
+
+/**
+ * Make it sailent that the some attachments with bad MIME type are present
+ *
+ * @param atts Array of attachments subarrays
+ * @return none
+ */
+function markBadAttachments(atts) {
+ var badMIMEArray = [ "application/octet-stream", "text/x-log", "undefined" ];
+ if (!constantData.passwordState.passAvailable) {
+ console.log("markBadAttachments : No password, no XML-RPC calls; sorry");
+ return null;
+ }
+
+ var badAttachments = atts.filter(function(att) {
+ return (isInList(att[2], badMIMEArray));
+ });
+
+ if (badAttachments.length > 0) {
+ var titleElement = document.
+ getElementsByClassName("bz_alias_short_desc_container")[0];
+ titleElement.style.backgroundColor = "olive";
+
+ createDeadLink("fixAllButton", "Fix all", titleElement, function() {
+ Array.forEach(badAttachments, function(x) {
+ fixAttachById(x[1]);
+ });
+ }, [], false, null, "f");
+ badAttachments.forEach(function(x, i, a) {
+ addTextLink(x);
+ });
+ }
+}
+
+/**
+ * Is this bug a RHEL bug?
+ *
+ * @return Boolean true if it is a RHEL bug
+ */
+function isEnterprise() {
+ var result = ProfessionalProducts.some(function(elem,idx,arr) {
+ return new RegExp(elem).test(getProduct());
+ });
+ return result;
+}
+
+/**
+ * Find out whether the bug is needed an attention of bugZappers
+ *
+ * @return Boolean whether the bug has been triaged or not
+ */
+function isTriaged() {
+ return hasKeyword("Triaged");
+}
+
+/**
+ * Set branding colours to easily distinguish between Fedora and RHEL bugs
+ *
+ * @param brand String with product of the current bug
+ * @param version String with the version of the bug
+ * @param its String with the IsueTracker numbers
+ * @return none
+ */
+function setBranding() {
+ var brandColor = {};
+ var TriagedColor = {};
+
+ var ITbutton = document.getElementById("cf_issuetracker");
+ var its = ITbutton ? ITbutton.value.trim() : "";
+
+ if (isEnterprise()) {
+ if (its && (its.length > 0)) {
+ brandColor = RHITColor;
+ } else {
+ brandColor = RHColor;
+ }
+ } else if (new RegExp("Fedora").test(document.getElementById("product").value)) {
+ if (document.getElementById("version").value === "rawhide") {
+ brandColor = RawhideColor;
+ } else {
+ brandColor = FedoraColor;
+ }
+ }
+
+ // Comment each of the following lines to get only partial branding
+ document.getElementsByTagName("body")[0].style.background = brandColor
+ .toString()
+ + " none";
+ document.getElementById("titles").style.background = brandColor.toString()
+ + " none";
+
+ // Remove "Bug" from the title of the bug page, so we have more space with
+ // plenty of tabs
+ var titleElem = document.getElementsByTagName("title")[0];
+
+ titleElem.textContent = titleElem.textContent.slice(4);
+ var bodyTitleParent = document.getElementById("summary_alias_container").parentNode;
+ var bodyTitleElem = bodyTitleParent.getElementsByTagName("b")[0];
+ bodyTitleElem.textContent = bodyTitleElem.textContent.slice(4);
+
+ // Make background-color of the body of bug salmon pink
+ // for security bugs.
+ if (hasKeyword("Security")) {
+ document.getElementById("bugzilla-body").style.background = SalmonPink
+ .toString() + ' none';
+ }
+
+ // Make it visible whether the bug has been triaged
+ if (isTriaged()) {
+ document.getElementById("bz_field_status").style.background = brandColor
+ .lightColor().toString()
+ + " none";
+ }
+
+ var compElems;
+ if (config.suspiciousComponents
+ && isInList(getComponent(), config.suspiciousComponents)
+ && (compElems = document
+ .getElementById("bz_component_edit_container"))) {
+ compElems.style.background = "red none";
+ }
+}
+
+/**
+ *
+ */
+function queryUpstreamCallback(text) {
+ var searchData = filterByRegexp(constantData.queryUpstreamBug, getComponent());
+ var urlBase = searchData.url;
+ text = searchData.searchBy+":"+searchData.fillIn+" "+text.trim();
+ if (searchData.fillIn == "$$$") {
+ text = text.replace("$$$", getComponent());
+ }
+ text = encodeURIComponent(text).replace("%20","+");
+ postMessage(new Message("OpenURLinTab", urlBase + text));
+}
+
+/**
+ * Search simple query in the upstream bugzilla appropriate for the component
+ *
+ * @return none
+ */
+function queryUpstream() {
+ if (!constantData.queryUpstreamBug) {
+ alert("We don't have constantData.queryUpstreamBug set up!");
+ return null;
+ }
+ var text = getSelection();
+ if (!text) {
+ postMessage(new Message("GetClipboard", "queryUpstream"));
+ } else {
+ queryUpstreamCallback(text);
+ }
+}
+
+/**
+ * Open a tab in the upstream bugzilla to create a new bug
+ *
+ * @return none
+ */
+function sendBugUpstream() {
+ var urlStr = filterByRegexp(constantData.newUpstreamBug, getComponent());
+ if (!urlStr) {
+ return null;
+ }
+
+ postMessage(new Message("OpenBugUpstream", {
+ url: urlStr,
+ subject: document.getElementById("short_desc_nonedit_display").
+ textContent.trim(),
+ comment: collectComments()
+ }));
+}
+
+/**
+ * Add a link opening selected lines of Xorg.0.log
+ *
+ * @return none
+ */
+function addCheckXorgLogLink(attList) {
+ if (config.xorglogAnalysis) {
+ attList.forEach(function (row) {
+ var elemS = row[4].getElementsByTagName("td");
+ var elem = elemS[elemS.length - 1];
+ createDeadLink("xorgLogAnalyzeLink", "check", elem,
+ analyzeXorgLog, [row[1], "AnalyzeXorgLogBacktrace"], "br");
+ });
+ }
+}
+
+/**
+ * Given line to be parsed, find out which chipset it is and fill in the
+ * whiteboard
+ *
+ * @param PCIidArrObj object with two fields
+ * id Array manufacturer-ID and product-ID (PCI IDs)
+ * chipsetLine RE
+ * @param driverStr String with the driver name
+ * @return None
+ */
+function fillInWhiteBoard(PCIidArrObj) {
+ var outStr = "";
+ var cardIDStr = "";
+ var cardIDArr = [];
+ var cardName = "";
+ var PCIid = (PCIidArrObj.id[0] + "," + PCIidArrObj.id[1]).toUpperCase();
+
+ if (PCIidArrObj.id[0].toLowerCase() == "10de") {
+ cardName = PCIidArrObj.chipsetLine[2].replace(/\s*nvidia\s*/ig,"").
+ replace('"','','g');
+ } else {
+ try {
+ cardName = constantData.chipNames[PCIid][0];
+ } catch (e if e instanceof TypeError) {
+ alert("PCI ID " + PCIid + " is not known!");
+ return ; // early termination
+ } catch (e) {
+ throw e;
+ }
+ }
+
+ clickMouse("editme_action");
+ var titleElem = document.getElementById('short_desc');
+ titleElem.value = '[' + cardName + ']\u00A0' + titleElem.value;
+ document.getElementById("fillin_btn").style.display = "none";
+}
+
+/**
+ * Get attached Xorg.0.log, parse it and find the value of chip. Does not fill
+ * the whiteboard itself, just adds button to do so,paramList so that slow
+ * XMLHttpRequest is done in advance.
+ *
+ * @param log array of XorgLogAttList
+ * @return None
+ */
+function fillInChipMagic(XlogID) {
+ analyzeXorgLog(XlogID, "AnalyzeInterestingLine");
+}
+
+function chipsetMagic (interestingLineArr) {
+ // parse Xorg.0.log
+ if (interestingLineArr.length >0) {
+ var interestingArray = interestingLineArr[0];
+ if (interestingArray.length > 1) {
+ var interestingPCIID = interestingArray[1].trim().split(":");
+ createNewButton("short_desc_nonedit_display", false, {
+ "name": "Fill In",
+ "chipMagic": {
+ "id": interestingPCIID,
+ "chipsetLine": interestingLineArr[1]
+ },
+ });
+ }
+ }
+}
+
+function analyzeXorg(results) {
+ var innerString = "";
+
+ if (results.length > 0) {
+ results.splice(0, 1); // remove headers
+ results.sort();
+
+ results.forEach(function(lRE) {
+ innerString += lRE.input + "<br>\n";
+ });
+ innerString += "----------<br>\n" +
+ results.length + " interesting lines found.";
+ } else {
+ innerString += "No matching lines found!";
+ }
+
+ postMessage(new Message("OpenStringInPanel",
+ '<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">' +
+ "<html><head><title>Xorg.0.log analysis</title></head><body><pre>\n" +
+ innerString.trim() +
+ "\n</pre></body></html>"));
+}
+
+function analyzeXorgLog(attachID, backMsg) {
+ postMessage(new Message("GetURL", {
+ url: "https://" + window.location.hostname + "/attachment.cgi?id=" + attachID,
+ backMessage: backMsg
+ }));
+}
+
+function findInterestingLine(wholeLog, backMsg) {
+ var REstr = logAnalyzeLogic[backMsg].re;
+ var REarr = [];
+ if (typeof REstr == "string") {
+ REarr = [new RegExp(REstr)];
+ } else if (Array.isArray(REstr)) {
+ REarr = REstr.map(function (reone) {
+ return new RegExp(reone);
+ });
+ }
+ var results = [];
+ wholeLog.split("\n").
+ forEach(function(line) {
+ REarr.forEach(function (re, reIdx) {
+ if (re.test(line)) {
+ results.push(re.exec(line));
+ }
+ });
+ });
+ logAnalyzeLogic[backMsg].func(results);
+}
+
+/**
+ * Return string with the ID for the external_id SELECT for external bugzilla
+ *
+ * @param URLhostname String hostname of the external bugzilla
+ * @return String with the string for the external_id SELECT
+ */
+function getBugzillaName(URLhostname) {
+ var bugzillaID = "";
+ var bzLabelNames = constantData.bugzillaLabelNames;
+ if (bzLabelNames[URLhostname]) {
+ bugzillaID = bzLabelNames[URLhostname];
+ } else {
+ bugzillaID = "";
+ }
+ return bugzillaID;
+}
+
+/**
+ * Callback function for the XMLRPC request
+ *
+ * @param ret Object with xmlhttprequest response with attributes:
+ * + status -- int return code
+ * + statusText
+ * + responseHeaders
+ * + responseText
+ */
+function XMLRPCcallback() {
+ reqCounter--;
+ if (reqCounter <= 0) {
+ setTimeout(function () {
+ window.location.reload(true);
+ }, 1000);
+ }
+}
+
+/**
+ * The worker function -- call XMLRPC to fix MIME type of the particular
+ * attachment
+ *
+ * @param id Integer with the attachment id to be fixed
+ * @param type String with the new MIME type, optional defaults to "text/plain"
+ * @param email Boolean whether email should be sent to appropriate person;
+ * option, defaults to false
+ *
+ * updateAttachMimeType($data_ref, $username, $password)
+ *
+ * Update the attachment mime type of an attachment. The first argument is a
+ * data hash containing information on the new MIME type and the attachment id
+ * that you want to act on.
+ *
+ * $data_ref = { "attach_id" => "<Attachment ID>", # Attachment ID to perform
+ * MIME type change on. "mime_type" => "<New MIME Type Value>", # Legal MIME
+ * type value that you want to change the attachment to. "nomail" => 0, #
+ * OPTIONAL Flag that is either 1 or 0 if you want email to be sent or not for
+ * this change };
+ *
+ */
+function fixAttachById(id, type, email) {
+ var params = [];
+
+ if (type === undefined) {
+ type = "text/plain";
+ }
+ if (email === undefined) {
+ email = false;
+ }
+
+ // https://bugzilla.redhat.com/\
+ // docs/en/html/api/extensions/compat_xmlrpc/code/webservice.html
+ // test on https://bugzilla.redhat.com/show_bug.cgi?id=485145
+ params.push({
+ 'attach_id' : id,
+ 'mime_type' : type,
+ 'nomail' : !email
+ });
+
+ postMessage(new Message("MakeXMLRPCall", {
+ url: constantData.XMLRPCData[window.location.hostname].url,
+ login: getLogin(),
+ method: "bugzilla.updateAttachMimeType",
+ params: params,
+ callRPC: "FixAttachmentMIMECallback"
+ }));
+ reqCounter++;
+}
+
+/**
+ * Add a link to the bad attachment for fixing it.
+ *
+ * @param
+ * <TR> DOM jQuery element with a bad attachment
+ * @return none
+ */
+function addTextLink(row) {
+ var elemS = row[4].getElementsByTagName("td");
+ var elem = elemS[elemS.length - 1];
+ createDeadLink("addFix2TextLink", "text", elem,
+ fixAttachById, row[1], "br");
+}
+
+/**
+ * Add information about the upstream bug upstream, and closing it.
+ *
+ * @param evt Event which called this handler
+ * @return none
+ */
+function addClosingUpstream() {
+ var refs = document.getElementById("external_bugs_table")
+ .getElementsByTagName("tr");
+
+ // that's a bad id, if there is a one. :)
+ var inputBox = document.getElementById("inputbox");
+ var externalBugID = 0;
+ var wholeURL = "";
+
+ // Fix missing ID on the external_id SELECT
+ document.getElementsByName("external_id")[0].setAttribute("id",
+ "external_id");
+
+ if (inputBox.value.match(/^http.*/)) {
+ externalBugID = getBugNoFromURL(inputBox.value);
+ if (externalBugID) {
+ inputBox.value = externalBugID;
+ }
+ // get bugzillaName and set the label
+ var bugzillaName = getBugzillaName(wholeURL.host);
+ selectOptionByLabel("external_id", bugzillaName);
+ } else if (!isNaN(inputBox.value)) {
+ externalBugID = parseInt(inputBox.value, 10);
+ var bugzillaHostname = document.getElementById("external_id").value;
+ wholeURL = bugzillaHostname+"show_bug.cgi?id="+externalBugID;
+ } else {
+ // no inputBox.value -- maybe there is an external bug from
+ // the previous commit?
+ }
+
+ // It is not good to close bug as UPSTREAM, if there is no reference
+ // to the upstream bug.
+ if ((externalBugID > 0) || (refs.length > 2)) {
+ var msgStr = constantData.commentStrings.sentUpstreamString;
+ msgStr = msgStr.replace("§§§", wholeURL);
+ centralCommandDispatch("comment",msgStr);
+ centralCommandDispatch("status", "CLOSED");
+ centralCommandDispatch("resolution", "UPSTREAM");
+ } else {
+ console.log("No external bug specified among the External References!");
+ }
+}
+
+function markBugTriaged() {
+ // https://fedoraproject.org/wiki/BugZappers/Meetings/Minutes-2009-Oct-27
+ // http://meetbot.fedoraproject.org/fedora-meeting/2009-11-24\
+ // /fedora-meeting.2009-11-24-15.11.log.html
+ // http://meetbot.fedoraproject.org/fedora-meeting/2009-11-24\
+ // /fedora-meeting.2009-11-24-15.11.log.html
+ addStuffToTextBox("keywords","Triaged");
+}
+
+/**
+ *
+ */
+function parseBacktrace (ret) {
+ var signalHandler = new RegExp("^\\s*#[0-9]*\\s*<signal handler called>");
+ var frameNo = new RegExp("^\\s*#([0-9]*)\\s");
+
+ var splitArray = ret.split("\n");
+ var i = 0, ii = splitArray.length;
+ var outStr = "", curLine = "", numStr = "";
+ var lineCounter = 0, endLineNo = 0;
+
+ // TODO shouldn't we just cut off and analyze whole thread?
+ while (i < ii) {
+ if (signalHandler.test(splitArray[i])) {
+ break;
+ }
+ i++;
+ }
+
+ if (i < ii) {
+ lineCounter = parseInt(frameNo.exec(splitArray[i])[1], 10);
+ endLineNo = lineCounter + NumberOfFrames;
+ curLine = splitArray[i];
+ while ((lineCounter < endLineNo) && (curLine.trim().length > 0)
+ && (i < ii)) {
+ outStr += curLine + '\n';
+ numStr = frameNo.exec(curLine);
+ if (numStr) {
+ lineCounter = parseInt(numStr[1], 10);
+ }
+ i++;
+ curLine = splitArray[i];
+ }
+ return outStr;
+ }
+ return "";
+}
+
+function RHBZinit() {
+ // inheritance ... call superobject's constructor
+ var AbrtRE = new RegExp("^\\s*\\[abrt\\]");
+ var FillMagicDoneRE = new RegExp("^\\s*\\[[0-9a-zA-Z]*\\]");
+ var btSnippet = "";
+
+ var signaturesCounter = 0;
+ var chipMagicInterestingLine = "";
+
+ // getBadAttachments
+ var XorgLogAttList = [];
+ var XorgLogAttListIndex = 0;
+ var attachments = getAttachments();
+ markBadAttachments(attachments);
+
+ var parsedAttachments = attachments.filter(function (att) {
+ return (new RegExp(titleParsedAttachment).test(att[0]));
+ });
+
+ if (constantData.defaultAssignee) {
+ setDefaultAssignee();
+ }
+
+ // Dig out backtrace protection against double-firing?
+ btSnippet = "";
+
+ var parseAbrtBacktraces = config.parseAbrtBacktraces;
+ if (parseAbrtBacktraces && AbrtRE.test(getSummary())) {
+ pasteBacktraceInComments(parsedAttachments);
+ }
+
+ // Find out Xorg.0.log attachment URL
+ XorgLogAttList = attachments.filter(function (value) {
+ // Xorg.0.log must be text, otherwise we cannot parse it
+ return (/[xX].*log/.test(value[0]) && /text/.test(value[2]));
+ });
+ // Just add a link to every Xorg.0.log link analyzing it.
+ addCheckXorgLogLink(XorgLogAttList);
+
+ var maintCCAddr = "";
+ if (constantData.CCmaintainer) {
+ maintCCAddr = filterByRegexp(constantData.CCmaintainer,
+ getComponent())[0]; // filterByRegexp returns array, not string
+ }
+
+ // TODO Get compiz bugs as well
+ if ((constantData.chipNames) &&
+ (XorgLogAttList[0]) &&
+ (!FillMagicDoneRE.test(getSummary())) &&
+ (maintCCAddr === "xgl-maint@redhat.com")) {
+ // Add find chip magic button
+ var whiteboard_string = document.getElementById("status_whiteboard").value;
+ if (!/card_/.test(whiteboard_string)) {
+ fillInChipMagic(XorgLogAttList[0][1]);
+ }
+ }
+
+ // we should make visible whether maintCCAddr is in CCList
+ if (maintCCAddr && isInList(maintCCAddr, getCCList())) {
+ var ccEditBoxElem = document.getElementById("cc_edit_area_showhide");
+ ccEditBoxElem.style.color = "navy";
+ ccEditBoxElem.style.fontWeight = "bolder";
+ ccEditBoxElem.style.textDecoration = "underline";
+ }
+
+ // Take care of signature for Fedora bugzappers
+ if (config.signature && config.signature.length > 0) {
+ var signatureFedoraString = config.signature;
+ document.forms.namedItem("changeform").addEventListener("submit",
+ function(aEvt) {
+ if (signaturesCounter < 1) {
+ addStuffToTextBox("comment", signatureFedoraString);
+ signaturesCounter += 1;
+ }
+ }, false);
+ }
+ setBranding();
+
+ // set default assignee on change of the component
+ var compElement = document.getElementById("component");
+ if (compElement && (compElement.options)) {
+ document.getElementById("component").addEventListener("change",
+ function() {
+ changeAssignee("default");
+ }, false);
+ }
+
+ // Uncheck "set default assignee" when the assignee is changed by other means
+ document.getElementById("assigned_to").addEventListener("change",
+ function() {
+ changeAssignee(null);
+ }, false);
+}
diff --git a/data/lib/skip-bug.js b/data/lib/skip-bug.js
new file mode 100644
index 0000000..da6f606
--- /dev/null
+++ b/data/lib/skip-bug.js
@@ -0,0 +1,19 @@
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+// "use strict";
+
+function reloadPage() {
+ var stemURL = 'https://HOSTNAME/show_bug.cgi?id=';
+ var titleElems = document.getElementsByTagName('title');
+ if (titleElems) {
+ var REArr = new RegExp('[bB]ug\\s+([0-9]+)').
+ exec(titleElems[0].textContent);
+ var hostname = document.location.hostname;
+ if (REArr) {
+ document.location = stemURL.
+ replace('HOSTNAME',hostname) + REArr[1];
+ }
+ }
+}
+
+reloadPage();
diff --git a/data/lib/util.js b/data/lib/util.js
new file mode 100644
index 0000000..6c204ff
--- /dev/null
+++ b/data/lib/util.js
@@ -0,0 +1,280 @@
+/*global console: false */
+/*jslint onevar: false */
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+"use strict";
+// ==============================================================
+
+/**
+ * parse URL to get its parts.
+ *
+ * @param url
+ * @return object with all parsed parts of URL as properties
+ *
+ * Originally from http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
+ * Copyright February 19th, 2009, James Padolsey, <license undeclared>
+ *
+ * This function creates a new anchor element and uses location
+ * properties (inherent) to get the desired URL data. Some String
+ * operations are used (to normalize results across browsers).
+ */
+function parseURL(url) {
+ var a = document.createElement('a');
+ a.href = url;
+ return {
+ source: url,
+ protocol: a.protocol.replace(':',''),
+ host: a.hostname,
+ port: a.port,
+ query: a.search,
+ params: (function(){
+ var ret = {},
+ seg = a.search.replace(/^\?/,'').split('&'),
+ len = seg.length, i = 0, s;
+ for (;i<len;i++) {
+ if (!seg[i]) { continue; }
+ s = seg[i].split('=');
+ ret[s[0]] = s[1];
+ }
+ return ret;
+ })(),
+ file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
+ hash: a.hash.replace('#',''),
+ path: a.pathname.replace(/^([^\/])/,'/$1'),
+ relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
+ segments: a.pathname.replace(/^\//,'').split('/')
+ };
+}
+
+/**
+ * parse XML object out of string working around various bugs in Gecko implementation
+ * see https://developer.mozilla.org/en/E4X for more information
+ *
+ * @param inStr String with unparsed XML string
+ * @return XML object
+ */
+function parseXMLfromString (inStuff) {
+ // if (typeof inStuff !== 'string') In future we should recognize this.response
+ // and get just .text property out of it. TODO
+ var respStr = inStuff.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""); // bug 336551
+ return new XML(respStr);
+}
+
+/**
+ * Get a bug no
+ */
+function getBugNo() {
+ console.log("bugNo = " + document.forms.namedItem('changeform').getElementsByName("id")[0].value);
+ return document.forms.namedItem('changeform').getElementsByName("id")[0].value;
+}
+
+/**
+ * Get a bug no from URL ... fails with aliases
+ * @param url String with URL to be analyzed
+ * @return String with the bug ID
+ */
+function getBugNoFromURL(url) {
+ var params = parseURL(url).params;
+ if (params && params.id) {
+ return params.id;
+ }
+}
+
+/*
+ * From <a> element diggs out just plain email address
+ * Note that bugzilla.gnome.org doesn't have mailto: url but
+ * https://bugzilla.gnome.org/page.cgi?id=describeuser.html&login=mcepl%40redhat.com
+ *
+ * @param aElement Element with href attribute or something else
+ * @return String with the address or null
+ *
+ */
+function parseMailto(aElement) {
+ var emailStr = "", hrefStr = "";
+ // use url utils
+ if (aElement) {
+ hrefStr = decodeURIComponent(aElement.getAttribute("href"));
+ emailStr = hrefStr.split(":");
+ // workaround for Gnome bugzilla ... no mailto: here.
+ if (emailStr.length < 2) {
+ var params = parseURL("https://" + window.location.hostname + "/" + hrefStr).params;
+ return decodeURI(params.login);
+ }
+ return emailStr[1];
+ }
+ return null;
+}
+
+/**
+ * format date to be in ISO format (just day part)
+ *
+ * @param date
+ * @return string with the formatted date
+ */
+function getISODate(dateStr) {
+ function pad(n) {
+ return n < 10 ? '0' + n : n;
+ }
+ var date = new Date(dateStr);
+ return date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' +
+ pad(date.getDate());
+}
+
+/**
+ * Check whether an item is member of the list. Idea is just to make long if
+ * commands slightly more readable.
+ *
+ * @param mbr string to be searched in the list
+ * @param list list
+ * @return position of the string in the list, or -1 if none found.
+ */
+function isInList(mbr, list) {
+ if (!list) {
+ return false;
+ }
+ return (list.indexOf(mbr) !== -1);
+};
+
+/**
+ * Make sure value returned is Array
+ *
+ * @param Array/String
+ * @return Array
+ *
+ * If something else than Array or String is passed to the function
+ * the result will be untouched actual argument of the call.
+ */
+function valToArray(val) {
+ var isArr = val &&
+ val.constructor &&
+ val.constructor.name === "Array";
+ return isArr ? val : [val];
+}
+
+/**
+ * Merges two comma separated string as a list and returns new string
+ *
+ * @param str String with old values
+ * @param value String/Array with other values
+ * @return String with merged lists
+ */
+function addCSVValue(str, value) {
+ var parts = (str.trim().length > 0 ? str.split(/[,\s]+/) : []);
+ if (!value) {
+ return str;
+ }
+ if (!isInList(value, parts)) {
+ var newValue = valToArray(value);
+ parts = parts.concat(newValue);
+ }
+ // this is necessary to get comma-space separated string even when
+ // value is an array already
+ parts = parts.join(",").split(",");
+ return parts.join(", ");
+}
+
+/**
+ * Treats comma separated string as a list and removes one item from it
+ *
+ * @param str String treated as a list
+ * @param value String with the value to be removed from str
+ * @return String with the resulting list comma separated
+ */
+function removeCSVValue(str, value) {
+ str = str.trim();
+ var parts = str ? str.split(/[,\s]+/) : [];
+ var valueArr = value instanceof Array ? value : value.split(/[,\s]+/);
+ parts = parts.filter(function (e, i, a) {
+ return (!isInList(e, valueArr));
+ });
+ return parts.join(", ");
+}
+
+/**
+ * select element of the array where regexp in the first element matches second
+ * parameter of this function
+ *
+ * @param list Array with regexps and return values
+ * @param chosingMark String by which the element of array is to be matched
+ * @return Object chosen element
+ */
+function filterByRegexp(list, chosingMark) {
+ var chosenPair = [];
+ if (list.length > 0) {
+ chosenPair = list.filter(function (pair) {
+ return new RegExp(pair.regexp, "i").test(chosingMark);
+ });
+ }
+ if (chosenPair.length > 0) {
+ return chosenPair[0].addr;
+ } else {
+ return "";
+ }
+}
+
+/**
+ * remove elements from the page based on their IDs
+ *
+ * @param doc Document object
+ * @param target String/Array with ID(s)
+ * @param remove Boolean indicating whether the node should be
+ * actually removed or just hidden.
+ * @return none
+ * TODO remove parameter could be replaced by function which would
+ * do actual activity.
+ */
+function killNodes(doc, target, remove) {
+ target = target.trim();
+ var targetArr = target instanceof Array ? target : target.split(/[,\s]+/);
+ targetArr.forEach(function(x) {
+ if (remove) {
+ var targetNode = doc.getElementById(x);
+ targetNode.parentNode.removeChild(targetNode);
+ } else {
+ x.style.display = "none";
+ }
+ });
+}
+
+/**
+ * Remove duplicate elements from array
+ *
+ * @param arr Array which needs to be cleaned up
+ * @return cleaned up array
+ */
+function removeDuplicates (arr) {
+ for (var i = 0; i < arr.length; i++) {
+ for (var j = i + 1; j < arr.length; j++) {
+ if (arr[i] == arr[j]) {
+ arr.splice (j, 1);
+ }
+ }
+ }
+ return arr;
+}
+
+// ============================================
+/**
+ * object to pack messaging. Use as in
+ postMessage(new Message("GetPassword", {
+ login: login,
+ hostname: location.hostname
+ }));
+ */
+function Message(cmd, data) {
+ this.cmd = cmd;
+ this.data = data;
+}
+
+function log(msg) {
+ postMessage(new Message("LogMessage", msg));
+}
+
+var NotLoggedinException = function NotLoggedinException (message) {
+ this.message = message;
+ this.name = "NotLoggedinException";
+};
+
+NotLoggedinException.prototype.toString = function () {
+ return this.name + ': "' + this.message + '"';
+};
diff --git a/docs/bzpage.md b/docs/bzpage.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/bzpage.md
diff --git a/docs/rhbzpage.md b/docs/rhbzpage.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/rhbzpage.md
diff --git a/jsons/Config_data.json b/jsons/Config_data.json
index 8db7b27..01775f1 100644
--- a/jsons/Config_data.json
+++ b/jsons/Config_data.json
@@ -116,7 +116,7 @@
"https://bugzilla.gnome.org/show_bug.cgi.*"
],
"enabledPackages":{
- "bugzilla.redhat.com":"all"
+ "bugzilla.redhat.com":"any"
},
"killNodes":{
"bugzilla.gnome.org":[
diff --git a/lib/bzpage.js b/lib/bzpage.js
deleted file mode 100644
index cb539dc..0000000
--- a/lib/bzpage.js
+++ /dev/null
@@ -1,1087 +0,0 @@
-/*jslint forin: true, rhino: true, onevar: false, browser: true, evil: true, laxbreak: true, undef: true, nomen: true, eqeqeq: true, bitwise: true, maxerr: 1000, immed: false, white: false, plusplus: false, regexp: false, undef: false, strict: true */
-// Released under the MIT/X11 license
-// http://www.opensource.org/licenses/mit-license.php
-"use strict";
-var util = require("util");
-var passUtils = require("passwords");
-var apiUtils = require("api-utils");
-var selfMod = require("self");
-var clip = require("clipboard");
-var preferences = require("preferences-service");
-var selection = require("selection");
-var prompts = require("prompts");
-var Request = require("request").Request;
-var tabs = require("tabs");
-var Color = require("color").Color;
-
-var bugURL = "https://bugzilla.redhat.com/show_bug.cgi?id=";
-
-// Shared contstants
-var NumberOfFrames = 7;
-exports.NumberOfFrames = NumberOfFrames;
-var BTSPrefNS = "bugzilla-triage.setting.";
-exports.BTSPrefNS = BTSPrefNS;
-var BTSPassRealm = "BTSXMLRPCPass";
-
-// ============================================
-
-var NotLoggedinException = function NotLoggedinException (message) {
- this.message = message;
- this.name = "NotLoggedinException";
-};
-
-NotLoggedinException.prototype.toString = function () {
- return this.name + ': "' + this.message + '"';
-};
-exports.NotLoggedinException = NotLoggedinException;
-
-// ====================================================================================
-// BZPage's methods
-var BZPage = function BZPage(win, config) {
- // constants
- this.SalmonPink = new Color(255, 224, 176); // RGB 255, 224, 176; HSL 36, 2,
- // 85
- this.ReporterColor = new Color(255, 255, 166); // RGB 255, 255, 166; HSL 60, 2,
- // 83
-
- // initialize dynamic properties
- var that = this;
- this.win = win;
- this.doc = win.document;
- this.hostname = this.win.location.hostname;
-
- // First, preflight check ... if we are not logged in, there
- // is nothing we can do.
- var logoutLink = Array.some(this.doc.links, function (x) {
- return x.search === "?logout=1" ;
- });
- if (!logoutLink) {
- throw new NotLoggedinException("Not logged in");
- }
-
- // So, now we know we are logged in, so we can get to
- // the real work.
- this.packages = this.getInstalledPackages(config);
-
- if ("commentStrings" in config.gJSONData) {
- this.commentStrings = config.gJSONData.commentStrings;
- }
-
- this.constantData = {};
- if ("constantData" in config.gJSONData) {
- this.constantData = config.gJSONData.constantData;
- this.constantData.queryUpstreamBug = JSON.parse(
- selfMod.data.load("queryUpstreamBug.json"));
- this.constantData.XMLRPCData = JSON.parse(
- selfMod.data.load("XMLRPCdata.json"));
- }
-
- if ("CCmaintainer" in this.constantData) {
- this.defBugzillaMaintainerArr = this.constantData.CCmaintainer;
- }
-
- if ("suspiciousComponents" in config.gJSONData.configData) {
- this.suspiciousComponents = config.gJSONData.configData.suspiciousComponents;
- }
-
- if ("XorgLogAnalysis" in config.gJSONData.configData) {
- this.xorglogAnalysis = config.gJSONData.configData.XorgLogAnalysis;
- }
-
- if ("submitsLogging" in config.gJSONData.configData &&
- config.gJSONData.configData.submitsLogging) {
- this.log = config.logger;
- this.setUpLogging();
- }
-
- if ("killNodes" in config.gJSONData.configData &&
- this.hostname in config.gJSONData.configData.killNodes) {
- var killConf = config.gJSONData.configData.killNodes[this.hostname];
- util.killNodes(this.doc, killConf[0], killConf[1]);
- }
-
- this.setConfigurationButton();
- this.submitHandlerInstalled = false;
-
- this.login = this.getLogin();
- // XML-RPC password
- if (this.hostname in this.constantData.XMLRPCData) {
- this.password = this.getPassword(this.login);
- }
-
- this.bugNo = util.getBugNo(this.doc.location.toString());
-
- // deal with aliases
- if (isNaN(parseInt(this.bugNo, 10)) && this.password) {
- this.bugNo = this.getRealBugNo();
- }
-
- this.title = this.doc.getElementById("short_desc_nonedit_display").textContent;
- this.CCList = this.getCCList();
-
- // Prepare for query buttons
- // element ID brElementPlace_location is later used in JSON files
- // Stay with this add_comment element even if RH BZ upgrades, this seems
- // to be generally much more stable (even with other bugzillas, e.g. b.gnome.org)
- // then some getElementById.
- var commentArea = this.doc.getElementsByName("add_comment")[0].parentNode;
- if (commentArea) {
- var brElementPlacer = commentArea.getElementsByTagName("br");
- brElementPlacer = brElementPlacer[0];
- if (brElementPlacer) {
- brElementPlacer.setAttribute("id","brElementPlacer_location");
- brElementPlacer.parentNode.insertBefore(this.doc.createElement("br"),
- brElementPlacer);
- }
- }
-
- this.checkComments();
- this.generateButtons();
-};
-
-/**
- * In case URL contains alias, not the real bug number, get the real bug no
- * from the XML representation. Sets correct value to this.bugNo.
- */
-BZPage.prototype.getRealBugNo = function () {
- console.log("We have to deal with bug aliased as " + this.bugNo);
- var that = this;
- // https://bugzilla.redhat.com/show_bug.cgi?ctype=xml&id=serialWacom
- Request({
- url: this.win.location.href+"&ctype=xml",
- onComplete: function(response) {
- if (response.status === 200) {
- var xmlRepr = response.xml;
- var bugID = parseInt(xmlRepr.getElementsByTagName("bug_id")[0].textContent, 10);
- if (isNaN(bugID)) {
- throw new Error("Cannot get bug no. even from XML representation!");
- }
- that.bugNo = bugID;
- console.log("The real bug no. is " + bugID);
- }
- }
- }).get();
-};
-
-/**
- *
- */
-BZPage.prototype.getInstalledPackages = function getInstalledPackages(cfg) {
- var installedPackages = {};
- var enabledPackages = [];
-
- // Collect enabled packages per hostname (plus default ones)
- if (cfg.gJSONData && ("commentPackages" in cfg.gJSONData)) {
- if ("enabledPackages" in cfg.gJSONData.configData) {
- var epObject = cfg.gJSONData.configData.enabledPackages;
- if (this.hostname in epObject) {
- enabledPackages = enabledPackages.concat(epObject[this.hostname].split(/[,\s]+/));
- }
- if ("any" in epObject) {
- enabledPackages = enabledPackages.concat(epObject.any.split(/[,\s]+/));
- }
- }
-
- if ((enabledPackages.length === 1) && (enabledPackages[0] === "all")) {
- enabledPackages = [];
- for (var key in cfg.gJSONData.commentPackages) {
- enabledPackages.push(key);
- }
- }
-
- enabledPackages.forEach(function (pkg, idx, arr) {
- if (pkg in cfg.gJSONData.commentPackages) {
- installedPackages[pkg] = cfg.gJSONData.commentPackages[pkg];
- }
- });
- }
- return installedPackages;
-};
-
-/**
- * Actual execution function
- *
- * @param cmdLabel String with the name of the command to be executed
- * @param cmdParams Object with the appropriate parameters for the command
- */
-BZPage.prototype.centralCommandDispatch = function centralCommandDispatch (cmdLabel, cmdParams) {
- switch (cmdLabel) {
- case "resolution":
- case "product":
- case "component":
- case "version":
- case "priority":
- this.selectOption(cmdLabel, cmdParams);
- break;
- case "status":
- this.selectOption("bug_status", cmdParams);
- break;
- case "platform":
- this.selectOption("rep_platform", cmdParams);
- break;
- case "os":
- this.selectOption("op_sys", cmdParams);
- break;
- case "severity":
- this.selectOption("bug_severity", cmdParams);
- break;
- case "target":
- this.selectOption("target_milestone", cmdParams);
- break;
- case "addKeyword":
- this.addStuffToTextBox("keywords",cmdParams);
- break;
- case "removeKeyword":
- this.removeStuffFromTextBox("keywords", cmdParams);
- break;
- case "addWhiteboard":
- this.addStuffToTextBox("status_whiteboard",cmdParams);
- break;
- case "removeWhiteboard":
- this.removeStuffFromTextBox("status_whiteboard",cmdParams);
- break;
- case "assignee":
- this.changeAssignee(cmdParams);
- break;
- case "qacontact":
- this.clickMouse("bz_qa_contact_edit_action");
- this.doc.getElementById("qa_contact").value = cmdParams;
- break;
- case "url":
- this.clickMouse("bz_url_edit_action");
- this.doc.getElementById("bug_file_loc").value = cmdParams;
- break;
- // TODO dependson/blocked doesn't work. Find out why.
- case "addDependsOn":
- this.clickMouse("dependson_edit_action");
- this.addStuffToTextBox("dependson", cmdParams);
- break;
- case "removeDependsOn":
- this.clickMouse("dependson_edit_action");
- this.removeStuffFromTextBox("dependson", cmdParams);
- break;
- case "addBlocks":
- this.clickMouse("blocked_edit_action");
- this.addStuffToTextBox("blocked", cmdParams);
- break;
- case "removeBlocks":
- this.clickMouse("blocked_edit_action");
- this.removeStuffFromTextBox("blocked", cmdParams);
- break;
- case "comment":
- this.addStuffToTextBox("comment", cmdParams);
- break;
- case "commentIdx":
- var commentText = this.commentStrings[cmdParams];
- this.addStuffToTextBox("comment", commentText);
- break;
- case "setNeedinfo":
- // cmdParams are actually ignored for now; we may in future
- // distinguish different actors to be target of needinfo
- this.setNeedinfoReporter();
- break;
- case "addCC":
- this.addToCCList(cmdParams);
- break;
- case "queryStringOurBugzilla":
- this.queryForSelection();
- break;
- // TODO flags, see also
-
- case "commit":
- if (cmdParams) {
- // Directly commit the form
- this.doc.forms.namedItem("changeform").submit();
- }
- break;
- }
-};
-
-/**
- * Take the ID of the package/id combination, and execute it
- *
- * @param String combined package + "//" + id combination
- * Fetches the command object from this.installedPackages and then
- * goes through all commands contained in it, and calls
- * this.centralCommandDispatch to execute them.
- *
- * PROBLEM: according to https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\
- * /Statements/for...in there is no guaranteed order of execution of
- * commands (i.e., key, commentObj[key] pairs) in for..in cycle.
- * According to https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference\
- * /Operators/Special_Operators/delete_Operator#Cross-browser_issues it seems that
- * everywhere except of Internet Explorer this should work well, but waiting
- * impatiently when this bite us.
- */
-BZPage.prototype.executeCommand = function executeCommand (cmd) {
- var cmdArr = cmd.split("//");
- var commentObj = this.packages[cmdArr[0]][cmdArr[1]];
-
- for (var key in commentObj) {
- this.centralCommandDispatch(key,commentObj[key]);
- }
-};
-
-/**
- * Change assignee of the bug
- *
- * @param newAssignee String with the email address of new assigneeAElement
- * or 'default' if the component's default assignee should be used.
- * Value null clears "Reset Assignee to default for component" checkbox
- * @return none
- */
-BZPage.prototype.changeAssignee = function changeAssignee (newAssignee) {
- var defAssigneeButton = null;
- // Previous assignee should know what's going on in his bug
- this.addToCCList(this.owner);
-
- // Optional value null
- if (newAssignee === null) {
- this.doc.getElementById("set_default_assignee").removeAttribute(
- "checked");
- return ;
- }
-
- if (this.getDefaultAssignee) {
- if (newAssignee === "default") {
- var defAss = this.getDefaultAssignee();
- if (defAss) {
- newAssignee = defAss;
- } else {
- return ;
- }
- }
- }
-
- if (newAssignee) {
- this.clickMouse("bz_assignee_edit_action");
- this.doc.getElementById("assigned_to").value = newAssignee;
- this.doc.getElementById("set_default_assignee").checked = false;
- defAssigneeButton = this.doc.getElementById("setDefaultAssignee_btn");
- if (defAssigneeButton) {
- defAssigneeButton.style.display = "none";
- }
- }
-};
-
-/**
- * Adds new option to the 'comment_action' scroll down box
- *
- * @param pkg String package name
- * @param cmd String with the name of the command
- * If the 'comment_action' scroll down box doesn't exist, this
- * function will set up new one.
- */
-BZPage.prototype.addToCommentsDropdown = function addToCommentsDropdown (pkg, cmd) {
- var select = this.doc.getElementById("comment_action");
- if (!select) {
- var that = this;
- this.doc.getElementById("comments").innerHTML +=
- "<div id='make_bugzilla_comment_action'>" +
- " <label for='comment_action'>Add Comment: </label>" +
- " <select id='comment_action'>" +
- " <option value=''>-- Select Comment from List --</option>" +
- "</div>";
- select = this.doc.getElementById("comment_action");
- select.addEventListener("change", function (evt) {
- var value = "";
- var valueElement = that.doc.getElementById("comment_action");
- if (valueElement) {
- var selIdx = valueElement.selectedIndex;
- value = valueElement.options[selIdx].value;
- console.log("value = " + value);
- } else {
- return;
- }
- that.executeCommand(value);
- }, false);
- }
-
- var opt = this.doc.createElement("option");
- opt.value = pkg + "//" + cmd;
- opt.textContent = this.packages[pkg][cmd].name;
- select.appendChild(opt);
-};
-
-/**
- * Create a A element leadink nowhere, but with listener running a callback on the click
- *
- * @param id String with a id to be added to the element
- * @param text String with a string to be added as a textContent of the element
- * @param parent Node which is a parent of the object
- * @param callback Function to be called after clicking on the link
- * @param params Array with parameters of the callback
- * @param Boolean breakBefore if there should be a <br> element before.
- * @return none
- */
-BZPage.prototype.createDeadLink = function createDeadLink (id, text, parent, callback, params, before, covered, accesskey) {
- var that = this;
- params = util.valToArray(params);
- var locParent = {};
-
- // Yes, I want != here, not !==
- if (covered != null) {
- locParent = this.doc.createElement(covered);
- parent.appendChild(locParent);
- } else {
- locParent = parent;
- }
-
- var newAElem = this.doc.createElement("a");
- newAElem.setAttribute("id", id);
- if (accesskey) {
- newAElem.setAttribute("accesskey", accesskey);
- }
- newAElem.setAttribute("href", "");
- newAElem.textContent = text;
-
- newAElem.addEventListener("click", function(evt) {
- callback.apply(that, params);
- evt.stopPropagation();
- evt.preventDefault();
- }, false);
-
- if ((before === "br") || (before === true)) {
- locParent.appendChild(this.doc.createElement("br"));
- } else if (before === "dash") {
- locParent.appendChild(this.doc.createTextNode("\u00A0-\u00A0"));
- }
-
- locParent.appendChild(newAElem);
-};
-
-
-/**
- * Generic function to add new button to the page. Actually copies new button
- * from the old one (in order to have the same look-and-feel, etc.
- *
- * @param location Object around which the new button will be added
- * @param after Boolean before or after location ?
- * @param pkg String which package to take the command from
- * @param id String which command to take
- * @return none
- */
-BZPage.prototype.createNewButton = function createNewButton (location, after, pkg, id) {
- var that = this;
- var cmdObj = this.packages[pkg][id];
- var newId = id + "_btn";
- var label = cmdObj.name;
-
- // protection against double-firings
- if (this.doc.getElementById(newId)) {
- console.log("Element with id " + newId + "already exists!");
- return ;
- }
-
- // creation of button might be conditional on existence of data in constantData
- if ("ifExist" in cmdObj) {
- if (!(cmdObj.ifExist in this.constantData)) {
- return ;
- }
- }
-
- var newButton = this.doc.createElement("input");
- newButton.setAttribute("id", newId);
- newButton.setAttribute("type", "button");
- newButton.value = label;
- newButton.addEventListener("click", function(evt) {
- that.executeCommand(pkg + "//" + id);
- }, false);
-
- var originalLocation = this.doc.getElementById(location);
-
- try {
- if (after) {
- originalLocation.parentNode.insertBefore(newButton,
- originalLocation.nextSibling);
- originalLocation.parentNode.insertBefore(this.doc
- .createTextNode("\u00A0"), newButton);
- } else {
- originalLocation.parentNode.insertBefore(newButton, originalLocation);
- originalLocation.parentNode.insertBefore(this.doc
- .createTextNode("\u00A0"), originalLocation);
- }
- } catch (e) {
- if (e instanceof TypeError) {
- console.error("cannot find originalLocation element with id " + location);
- } else {
- throw e;
- }
- }
-};
-
-/**
- *
- */
-BZPage.prototype.generateButtons = function generateButtons () {
- var topRowPosition = "topRowPositionID";
- var bottomRowPosition = "commit";
-
- // create anchor for the top toolbar
- var commentBox = this.doc.getElementById("comment");
- var brElement = this.doc.createElement("br");
- brElement.setAttribute("id",topRowPosition);
- commentBox.parentNode.normalize();
- commentBox.parentNode.insertBefore(brElement, commentBox);
-
- for (var pkg in this.packages) {
- for (var cmdIdx in this.packages[pkg]) {
- var cmdObj = this.packages[pkg][cmdIdx];
- switch (cmdObj.position) {
- case "topRow":
- this.createNewButton(topRowPosition, false, pkg, cmdIdx);
- break;
- case "bottomRow":
- this.createNewButton(bottomRowPosition, false, pkg, cmdIdx);
- break;
- case "dropDown":
- this.addToCommentsDropdown(pkg,cmdIdx);
- break;
- default: // [+-]ID
- var firstChr = cmdObj.position.charAt(0);
- var newId = cmdObj.position.substr(1);
- this.createNewButton(newId, firstChr === "+", pkg, cmdIdx);
- break;
- }
- }
- }
-};
-
-BZPage.prototype.setConfigurationButton = function setConfigurationButton () {
- var additionalButtons = this.doc.querySelector("#bugzilla-body *.related_actions");
- var configurationButtonUI = this.doc.createElement("li");
- configurationButtonUI.innerHTML = "\u00A0-\u00A0<a href='' id='configurationButton'>"
- + "Triage configuration</a>";
- additionalButtons.appendChild(configurationButtonUI);
- this.doc.getElementById("configurationButton").addEventListener(
- "click",
- function(evt) {
- var prfNm = BTSPrefNS+"JSONURL";
- var url = preferences.get(prfNm,"");
-
- var reply = prompts.prompt("New location of JSON configuration file", url);
- if (reply) {
- preferences.set(prfNm, reply.trim());
- prompts.alert("For now, you should really restart Firefox!");
- }
-
- evt.stopPropagation();
- evt.preventDefault();
- }, false);
-};
-
-/*
- * From <a> element diggs out just plain email address
- * Note that bugzilla.gnome.org doesn't have mailto: url but
- * https://bugzilla.gnome.org/page.cgi?id=describeuser.html&login=mcepl%40redhat.com
- *
- * @param aElement Element with href attribute or something else
- * @return String with the address or null
- *
- */
-BZPage.prototype.parseMailto = function parseMailto(aElement) {
- var emailStr = "", hrefStr = "";
- // use url utils
- if (aElement) {
- hrefStr = decodeURIComponent(aElement.getAttribute("href"));
- emailStr = hrefStr.split(":")[1];
- //
- if (emailStr === undefined) {
- var params = util.getParamsFromURL("https://" + this.hostname + "/" + hrefStr);
- emailStr = decodeURI(params.login);
- }
- return emailStr;
- }
- return null;
-};
-
-/**
- * Get the current email of the reporter of the bug.
- *
- * @return string
- */
-BZPage.prototype.getReporter = function getReporter () {
- var reporterElement = this.getOptionTableCell("bz_show_bug_column_2", "Reported");
- // RH Bugzilla after upgrade to 3.6.2 moved the information to other column
- if (!reporterElement) {
- reporterElement = this.getOptionTableCell("bz_show_bug_column_1", "Reported", true);
- }
- // Maemo calls the label "Reporter" and it doesn't have ids on table columns ... TODO(maemo)
-
- return this.parseMailto(reporterElement);
-};
-
-BZPage.prototype.getComponent = function getComponent() {
- var elem = this.doc.getElementById("component");
- if (elem) {
- return elem.value;
- }
- return null;
-};
-
-
-BZPage.prototype.commentsWalker = function commentsWalker (fce) {
- var comments = this.doc.getElementById("comments").getElementsByClassName(
- "bz_comment");
- Array.forEach(comments, function(item) {
- fce(item);
- }, this);
-};
-
-/**
- * Set background color of all comments made by reporter in ReporterColor color
- *
- */
-BZPage.prototype.checkComments = function checkComments () {
- var that = this;
- var reporterRE = new RegExp(this.getReporter());
- this.commentsWalker(function(x) {
- var email = that.parseMailto(x.getElementsByClassName("vcard")[0]
- .getElementsByTagName("a")[0]);
- if (reporterRE.test(email)) {
- x.style.backgroundColor = that.ReporterColor.toString();
- }
- });
-};
-
-BZPage.prototype.collectComments = function collectComments () {
- var outStr = "";
- this.commentsWalker(function(x) {
- outStr += x.getElementsByTagName("pre")[0].textContent + "\n";
- });
- return outStr.trim();
-};
-
-
-/**
- * Select option with given value on the <SELECT> element with given id.
- *
- * Also execute change HTMLEvent, so that the form behaves accordingly.
- *
- * @param id
- * @param label
- * @return none
- *
- */
-BZPage.prototype.selectOption = function selectOption (id, label, fireEvent) {
- if (!fireEvent) {
- fireEvent = true;
- }
- var sel = this.doc.getElementById(id);
- sel.value = label;
- if (fireEvent) {
- var intEvent = this.doc.createEvent("HTMLEvents");
- intEvent.initEvent("change", true, true);
- sel.dispatchEvent(intEvent);
- }
-};
-
-BZPage.prototype.selectOptionByLabel = function selectOptionByLabel(id, label, fireEvent) {
- if (!fireEvent) {
- fireEvent = true;
- }
- var sel = this.doc.getElementById(id);
- var labelRE = new RegExp(label.trim());
- var ourOption = Array.filter(sel.options, function (op) {
- return op.textContent.trim() === label;
- }, this);
-
- if (ourOption[0]) {
- sel.value = ourOption[0].value;
- }
-
- if (fireEvent) {
- var intEvent = this.doc.createEvent("HTMLEvents");
- intEvent.initEvent("change", true, true);
- sel.dispatchEvent(intEvent);
- }
-};
-
-/**
- * Send mouse click to the specified element
- *
- * @param String ID of the element to send mouseclick to
- * @return None
- */
-BZPage.prototype.clickMouse = function clickMouse (targetID) {
- var localEvent = this.doc.createEvent("MouseEvents");
- localEvent.initMouseEvent("click", true, true, this.doc.defaultView, 0, 0,
- 0, 0, 0, false, false, false, false, 0, null);
- this.doc.getElementById(targetID).dispatchEvent(localEvent);
-};
-
-/**
- * Add object to the text box (comment box or status whiteboard)
- *
- * @param id String with the id of the element
- * @param stuff String/Array to be added to the comment box
- *
- * @return none
- */
-BZPage.prototype.addStuffToTextBox = function addStuffToTextBox (id, stuff) {
- var textBox = this.doc.getElementById(id);
- if (textBox.tagName.toLowerCase() === "textarea") {
- stuff = textBox.value ? "\n\n" + stuff : stuff;
- textBox.value += stuff;
- } else {
- textBox.value = util.addCSVValue(textBox.value,stuff);
- }
-};
-
-/**
- * Remove a keyword from the element if it is there
- *
- * @param id String with the id of the element
- * @param stuff String/Array with keyword(s) to be removed
- */
-BZPage.prototype.removeStuffFromTextBox = function removeStuffFromTextBox (id, stuff) {
- var changedElement = this.getElementById(id);
- changedElement.value = util.removeCSVValue(changedElement.value,stuff);
-};
-
-/**
- * generalized hasKeyword ... search in the value of the box with given id
- *
- * @param id String with ID of the element we want to check
- * @param str String to be searched for
- * @return Boolean found?
- */
-BZPage.prototype.idContainsWord = function idContainsWord (id, str) {
- var kwd = "";
- try {
- kwd = this.doc.getElementById(id).value;
- } catch (e) {
- // For those who don't have particular element at all or if it is empty
- return false;
- }
- return (util.isInList(str, kwd.trim().split(/[,\s]+/)));
-};
-
-/**
- * Check for the presence of a keyword
- *
- * @param str String with the keyword
- * @return Boolean
- */
-BZPage.prototype.hasKeyword = function hasKeyword (str) {
- return (this.idContainsWord('keywords', str));
-};
-
-/**
-
-@return Element with the href attribute containng the information
- */
-BZPage.prototype.getOptionTableCell = function getOptionTableCell(tableId, label) {
- var cleanLabelRE = /^\s*([^.:]*):?\s*$/;
- label = label.trim().replace(cleanLabelRE,"$1").toLowerCase();
-
- var rows = this.doc.getElementById(tableId).getElementsByTagName("tr");
- var ourLine = Array.filter(rows, function(row) {
- var curLabel = row.getElementsByTagName("td")[0].textContent.toLowerCase();
- curLabel = curLabel.replace(cleanLabelRE,"$1");
- return (curLabel === label); // maybe this could be a RE match instead
- });
-
- if (ourLine.length > 0) {
- return ourLine[0].getElementsByTagName("td")[1].
- getElementsByTagName("a")[0];
- }
- return null;
-};
-
-/**
- * Set the bug to NEEDINFO state
- *
- * Working function.
- * @return none
- * @todo TODO we may extend this to general setNeedinfo function
- * with parameter [reporter|assignee|general-email-address]
- */
-BZPage.prototype.setNeedinfoReporter = function setNeedinfoReporter () {
- this.clickMouse("needinfo");
- this.selectOption("needinfo_role", "reporter");
-};
-
-/**
- *
- */
-BZPage.prototype.getOwner = function getOwner () {
- // TODO(maemo) doesn't work on maemo
- var assigneeAElement = this.getOptionTableCell("bz_show_bug_column_1","Assigned To");
- return this.parseMailto(assigneeAElement);
-};
-
-/**
- * Return maintainer which is per default by bugzilla
- * (which is not necessarily the one who is default maintainer per component)
- *
- * @return String with the maintainer's email address
- */
-BZPage.prototype.getDefaultBugzillaMaintainer = function getDefaultBugzillaMaintainer (component) {
- var address = util.filterByRegexp(this.defBugzillaMaintainerArr, component);
- return address;
-};
-
-/**
- * Parse the row with the attachment
- *
- * @param DOM element to be parsed
- * @return array with string name of the attachment, integer its id number,
- * string of MIME type, integer of size in kilobytes, and the whole
- * element itself
- */
-BZPage.prototype.parseAttachmentLine = function(inElem) {
- var MIMEtype = "";
- var size = 0;
-
- // Skip over obsolete attachments
- if (inElem.getElementsByClassName("bz_obsolete").length > 0) {
- return ( []);
- }
-
- // getting name of the attachment
- // TODO probably could use url.URL object
- var attName = inElem.getElementsByTagName("b")[0].textContent.trim();
-
- var aHrefsArr = inElem.getElementsByTagName("a");
- var aHref = Array.filter(aHrefsArr, function(x) {
- return x.textContent.trim() === "Details";
- })[0];
- var id = parseInt(aHref.getAttribute("href").replace(
- /^.*attachment.cgi\?id=/, ""), 10);
-
- // getting MIME type and size
- var stringArray = inElem.getElementsByClassName("bz_attach_extra_info")[0].textContent
- .replace(/[\n ()]+/g, " ").trim().split(", ");
- size = parseInt(stringArray[0], 10);
- MIMEtype = stringArray[1].split(" ")[0];
-
- return [ attName, id, MIMEtype, size, inElem ];
-};
-
-/**
- * collect the list of attachments in a structured format
- *
- * @return Array of arrays, one for each attachments;
- * each record has string name of the attachment, integer its id number,
- * string of MIME type, integer of size in kilobytes, and the whole
- * element itself
- */
-BZPage.prototype.getAttachments = function getAttachments () {
- var outAtts = [];
- var atts = this.doc.getElementById("attachment_table")
- .getElementsByTagName("tr");
- for ( var i = 1, ii = atts.length - 1; i < ii; i++) {
- outAtts.push(this.parseAttachmentLine(atts[i]));
- }
- return outAtts;
-};
-
-/**
- * Get login of the currently logged-in user.
- *
- * @return String with the login name of the currently logged-in user
- */
-BZPage.prototype.getLogin = function getLogin () {
- var lastLIElement = this.doc.querySelector("#header ul.links li:last-of-type");
- var loginArr = lastLIElement.textContent.split("\n");
- var loginStr = loginArr[loginArr.length - 1].trim();
- return loginStr;
-};
-
-/**
- * returns password from the current storage, or if there isn't
- * one, then it will ask user for it.
- *
- * @return String with the password
- */
-BZPage.prototype.getPassword = function getPassword (login) {
- var passPrompt = "Enter your Bugzilla password for fixing MIME attachment types";
- var switchPrompt = "Do you want to switch off features requiring password completely?";
- var prefName = BTSPrefNS+"withoutPassowrd";
- var domain = this.win.location.protocol + "//" + this.hostname;
-
- var pass = passUtils.getPassword(login, domain, BTSPassRealm);
- // pass === null means no appropriate password in the storage
- if (!preferences.get(prefName,false) && (pass === null)) {
- var passwordText = prompts.promptPassword(passPrompt);
- if (passwordText && passwordText.length > 0) {
- passUtils.setLogin(login, passwordText, domain,
- BTSPassRealm);
- return passwordText;
- } else {
- var switchOff = prompts.promptYesNoCancel(switchPrompt);
- if (switchOff) {
- preferences.set(prefName,true);
- }
- return null;
- }
- } else {
- return pass;
- }
-};
-
-/**
- *
- */
-BZPage.prototype.setUpLogging = function setUpLogging () {
- // Protection against double-call
- if (this.doc.getElementById("generateTSButton")) {
- return ;
- }
-
- // For adding additional buttons to the top toolbar
- var additionalButtons = this.doc.querySelector("#bugzilla-body *.related_actions");
- var that = this;
-
- // logging all submits for timesheet
- if (!this.submitHandlerInstalled) {
- this.doc.forms.namedItem("changeform").addEventListener("submit",function (evt) {
- var resp = that.log.addLogRecord(that);
- if (resp === null) {
- evt.stopPropagation();
- evt.preventDefault();
- }
- }, false);
- this.submitHandlerInstalled = true;
- }
-
- // (id, text, parent, callback, params, before, covered, accesskey)
- this.createDeadLink("generateTSButton", "Generate TS", additionalButtons,
- function(evt) {
- that.log.createBlankPage.call(that.log, "TimeSheet",
- that.log.generateTimeSheet);
- }, [], "dash", "li");
-
- this.createDeadLink("clearLogs", "Clear TS", additionalButtons,
- function(evt) {
- that.log.clearStore(this);
- }, [], "dash", "li");
-
- this.createDeadLink("importTSButton", "Import TS", additionalButtons,
- function(evt) {
- jsonPaths = prompts.promptFileOpenPicker(that.win);
- that.log.importOtherStore(jsonPaths, clearLogAElem);
- }, [], "dash", "li");
-
- var clearLogAElem = this.doc.getElementById("clearLogs");
- if (this.log.isEmpty()) {
- clearLogAElem.style.color = this.log.EmptyLogsColor;
- clearLogAElem.style.fontWeight = "normal";
- } else {
- clearLogAElem.style.color = this.log.FullLogsColor;
- clearLogAElem.style.fontWeight = "bolder";
- }
-};
-
-BZPage.prototype.getSelectionOrClipboard = function getSelectionOrClipboard () {
- var text = selection.text;
- if (!text) {
- text = clip.get();
- }
- return text;
-};
-
-/**
- * Opens a new tab with a query for the given text in the selected component
- *
- * @param text to be searched for
- * @param component String with the component name (maybe latter regexp?)
- * @param product (optional) string with the product name, if undefined,
- * search in all products
- * @return None
- *
- */
-BZPage.prototype.queryInNewTab = function(text, component, product) {
- var urlStr = "https://bugzilla.redhat.com/buglist.cgi?query_format=advanced";
- if (product) {
- urlStr += "&product=" + product.trim();
- }
- if (component) {
- if ("equivalentComponents" in this.constantData) {
- var equivCompsArr = this.constantData["equivalentComponents"].
- filter(function (REstr) {
- return new RegExp(REstr).test(this.getComponent());
- }, this);
- if (equivCompsArr.length > 0) {
- component = equivCompsArr[0];
- }
- urlStr += "&field0-0-0=component&type0-0-0=regexp&value0-0-0="
- + component.trim();
- } else {
- urlStr += "&field0-0-0=component&type0-0-0=substring&value0-0-0="
- + component.trim();
- }
- }
-
- // using more complicated query tables here, because they can be more easily
- // edited
- // for further investigative searches
- if (text) {
- text = encodeURIComponent(text.trim());
- var searchText = "&field1-0-0=longdesc&type1-0-0=substring&value1-0-0="
- + text
- + "&field1-0-1=attach_data.thedata&type1-0-1=substring&value1-0-1="
- + text
- + "&field1-0-2=status_whiteboard&type1-0-2=substring&value1-0-2="
- + text;
- urlStr += searchText;
- tabs.open({
- url: urlStr,
- inBackground: true,
- onOpen: function (t) {
- tabs.activeTab = t;
- }
- });
- }
-};
-
-/**
- * Get the text to search for and prepare other things for the real executive
- * function this.queryInNewTab, and run it.
- */
-BZPage.prototype.queryForSelection = function() {
- var text = this.getSelectionOrClipboard();
- if (text) {
- this.queryInNewTab(text, this.getComponent());
- }
-};
-
-/**
- * adds a person to the CC list, if it isn't already there
- *
- * @param who String with email address or "self" if the current user
- * of the bugzilla should be added
- */
-BZPage.prototype.addToCCList = function addToCCList (who) {
- if (!who) {
- return ;
- }
- if (who === "self") {
- this.doc.getElementById("addselfcc").checked = true;
- } else {
- this.clickMouse("cc_edit_area_showhide");
- if (!util.isInList(who, this.CCList)) {
- this.addStuffToTextBox("newcc",who);
- }
- }
-};
-
-/**
- * a collect a list of emails on CC list
- *
- * @return Array with email addresses as Strings.
- */
-BZPage.prototype.getCCList = function getCCList () {
- var CCListSelect = this.doc.getElementById("cc");
- var outCCList = [];
- if (CCListSelect) {
- outCCList = Array.map(CCListSelect.options, function(item) {
- return item.value;
- });
- }
- return outCCList;
-};
-
-// exports.BZPage = apiUtils.publicConstructor(BZPage);
-exports.BZPage = BZPage;
diff --git a/lib/libbugzilla.js b/lib/libbugzilla.js
new file mode 100644
index 0000000..600d193
--- /dev/null
+++ b/lib/libbugzilla.js
@@ -0,0 +1,383 @@
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+//
+"use strict";
+var preferences = require("preferences-service");
+var prompts = require("prompts");
+var clipboard = require("clipboard");
+var tabs = require("tabs");
+var logger = require("logger");
+var passUtils = require("passwords");
+var Request = require("request").Request;
+var selfMod = require("self");
+var urlMod = require("url");
+var dataUtils = require("utils/data");
+var xrpc = require("xmlrpc");
+var panelMod = require("panel");
+
+var JSONURLDefault = "https://fedorahosted.org/released"+
+ "/bugzilla-triage-scripts/Config_data.json";
+var BTSPrefNS = "bugzilla-triage.setting.";
+var BTSPassRealm = "BTSXMLRPCPass";
+
+var passwords = {}; // hash of passwords indexed by a hostname
+var config = exports.config = {};
+
+function Message(cmd, data) {
+ console.log("Message: cmd = " + cmd + ", data = " + data);
+ this.cmd = cmd;
+ this.data = data;
+}
+
+function log(msg) {
+ postMessage(new Message("LogMessage", msg));
+}
+
+/**
+ * parse XML object out of string working around various bugs in Gecko implementation
+ * see https://developer.mozilla.org/en/E4X for more information
+ *
+ * @param inStr String with unparsed XML string
+ * @return XML object
+ */
+function parseXMLfromString (inStuff) {
+ // if (typeof inStuff !== 'string') In future we should recognize this.response
+ // and get just .text property out of it. TODO
+ var respStr = inStuff.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""); // bug 336551
+ return new XML(respStr);
+}
+
+/**
+ * In case URL contains alias, not the real bug number, get the real bug no
+ * from the XML representation. Sets correct value to this.bugNo.
+ *
+ * This is a slow variant for bugs other than actual window
+ */
+function getRealBugNoSlow(bugNo, location, callback) {
+ console.log("We have to deal with bug aliased as " + this.bugNo);
+ // https://bugzilla.redhat.com/show_bug.cgi?ctype=xml&id=serialWacom
+ Request({
+ url: location.href+"&ctype=xml",
+ onComplete: function(response) {
+ if (response.status === 200) {
+ var xmlRepr = parseXMLfromString(response.text);
+ // TODO this is probably wrong, both XPath and .text attribute
+ var bugID = parseInt(xmlRepr.bug.bug_id.text, 10);
+ if (isNaN(bugID)) {
+ throw new Error("Cannot get bug no. even from XML representation!");
+ }
+ console.log("The real bug no. is " + bugID);
+ callback(bugID)
+ }
+ }
+ }).get();
+}
+
+function getPassword(login, domain) {
+ var passPrompt = "Enter your Bugzilla password for fixing MIME attachment types";
+ var switchPrompt = "Do you want to switch off features requiring password completely";
+ var prefName = BTSPrefNS+"withoutPassowrd";
+
+ var pass = passUtils.getPassword(login,
+ domain, BTSPassRealm);
+ var retObject = {
+ password: null, // password string or null if no password provided
+ withoutPass: false // whether user doesn't want to use password at all
+ };
+
+ // pass === null means no appropriatjslie password in the storage
+ if (!preferences.get(prefName,false) && (pass === null)) {
+ var passwordText = prompts.promptPassword(passPrompt);
+ if (passwordText && passwordText.length > 0) {
+ passUtils.setLogin(login, passwordText, domain,
+ BTSPassRealm);
+ retObject.password = passwordText;
+ } else {
+ var switchOff = prompts.promptYesNoCancel(switchPrompt);
+ if (switchOff) {
+ preferences.set(prefName,true);
+ }
+ retObject.withoutPass = switchOff;
+ }
+ } else {
+ retObject.password = pass;
+ }
+ return retObject;
+}
+
+exports.changeJSONURL = function changeJSONURL() {
+ var prfNm = BTSPrefNS+"JSONURL";
+ var url = preferences.get(prfNm,"");
+
+ var reply = prompts.prompt("New location of JSON configuration file", url);
+ if (reply) {
+ preferences.set(prfNm, reply.trim());
+ // TODO Restartless add-on needs to resolve this.
+ prompts.alert("For now, you should really restart Firefox!");
+ }
+};
+
+/**
+ *
+ libbz.getInstalledPackages(msg.data, function (pkgsMsg) {
+ worker.postMessage(pkgsMsg);
+
+ locationLoginObj: {
+ location: window.location.href,
+ login: getLogin()
+ }
+ */
+exports.getInstalledPackages = function getInstalledPackages(locationLoginObj, callback) {
+ var installedPackages = {};
+ var enabledPackages = [];
+ var location = locationLoginObj.location;
+
+ if (typeof location == "string") {
+ location = new urlMod.URL(location);
+ }
+
+ // Collect enabled packages per hostname (plus default ones)
+ if (config.gJSONData && ("commentPackages" in config.gJSONData)) {
+ if ("enabledPackages" in config.gJSONData.configData) {
+ var epObject = config.gJSONData.configData.enabledPackages;
+ if (location.host in epObject) {
+ enabledPackages = enabledPackages.concat(epObject[location.host].split(/[,\s]+/));
+ }
+ if ("any" in epObject) {
+ enabledPackages = enabledPackages.concat(epObject.any.split(/[,\s]+/));
+ }
+ }
+
+ if ((enabledPackages.length === 1) && (enabledPackages[0] === "all")) {
+ enabledPackages = [];
+ for (var key in config.gJSONData.commentPackages) {
+ enabledPackages.push(key);
+ }
+ }
+
+ // TODO To be decided, whether we cannot just eliminate packages in
+ // installedPackages and having it just as a plain list of all cmdObjects.
+ enabledPackages.forEach(function (pkg, idx, arr) {
+ if (pkg in config.gJSONData.commentPackages) {
+ installedPackages[pkg] = config.gJSONData.commentPackages[pkg];
+ }
+ });
+ }
+
+ // Expand commentIdx properties into full comments
+ var cmdObj = {};
+ for (var pkgKey in installedPackages) {
+ for (var cmdObjKey in installedPackages[pkgKey]) {
+ cmdObj = installedPackages[pkgKey][cmdObjKey];
+ if ("commentIdx" in cmdObj) {
+ cmdObj.comment = config.gJSONData.commentStrings[cmdObj.commentIdx];
+ delete cmdObj.commentIdx;
+ }
+ }
+ }
+
+ if ("sentUpstreamString" in config.gJSONData.commentStrings) {
+ config.constantData.commentStrings = {};
+ config.constantData.commentStrings.sentUpstreamString =
+ config.gJSONData.commentStrings["sentUpstreamString"];
+ }
+
+ var locURL = new urlMod.URL(locationLoginObj.location);
+ var passDomain = locURL.scheme + "://" + locURL.host;
+ var passwObj = getPassword(locationLoginObj.login, passDomain);
+ // In order to avoid sending whole password to the content script,
+ // we are sending just these two Booleans.
+ config.constantData.passwordState = {
+ passAvailable: (passwObj.password !== null),
+ withoutPass: passwObj.withoutPass
+ };
+
+ callback(new Message("CreateButtons", {
+ instPkgs: installedPackages,
+ constData: config.constantData,
+ config: config.configData,
+ kNodes: config.gJSONData.configData.killNodes
+ }));
+};
+
+exports.getClipboard = function getClipboard(cb) {
+ cb(clipboard.get());
+};
+
+exports.getURL = function getURL(url, callback) {
+ Request({
+ url: url,
+ onComplete: function(response) {
+ if (response.status == 200) {
+ callback(response.text);
+ }
+ }
+ }).get();
+};
+
+exports.openStringInNewPanel = function openStringInNewPanel(inHTMLStr) {
+ openURLInNewPanel("data:text/html;charset=utf-8," +
+ inHTMLStr);
+};
+
+var openURLInNewPanel = exports.openURLInNewPanel = function openURLInNewPanel(url) {
+ var panel = panelMod.Panel({
+ contentURL: url,
+ width: 640,
+ height: 640
+ });
+ panel.show();
+};
+
+var openURLInNewTab = exports.openURLInNewTab = function openURLInNewTab(url) {
+ tabs.open({
+ url: url,
+ inBackground: true,
+ onReady: function(t) {
+ t.activate();
+ }
+ });
+};
+
+exports.createUpstreamBug = function createUpstreamBug(urlStr, subject, comment) {
+ tabs.open({
+ url: urlStr,
+ inBackground: true,
+ onReady: function (t) {
+ var otherElems = t.contentDocument.forms.namedItem("Create").elements;
+ // Summary
+ otherElems.namedItem("short_desc").value = subject;
+ // Comment
+ otherElems.namedItem("comment").value = collectComments();
+ t.activate();
+ }
+ });
+};
+
+// Make a XML-RPC call ... most of the business logic should stay in the content script
+exports.makeXMLRPCCall = function makeXMLRPCCall(url, login, method, params, callback) {
+ var urlObj = urlMod.URL(url);
+ var passwObj = getPassword(login, urlObj.schema + "://" + urlObj.host);
+ if (!passwObj.password) {
+ return null; // TODO this should happen, only when user presses Escape in password prompt
+ }
+
+ var msg = new xrpc.XMLRPCMessage(method);
+ params.forEach(function (par) {
+ msg.addParameter(par);
+ });
+ msg.addParameter(login);
+ msg.addParameter(passwObj.password);
+
+ Request({
+ url: url,
+ onComplete: function(response) {
+ if (response.status == 200) {
+ var resp = parseXMLfromString(response.text);
+ callback(resp.toXMLString());
+ }
+ },
+ content: msg.xml(),
+ contentType: "text/xml"
+ }).post();
+};
+
+exports.initialize = function initialize(config, callback) {
+ var prefName = BTSPrefNS+"JSONURL";
+ var urlStr = "";
+
+ if (preferences.isSet(prefName)) {
+ urlStr = preferences.get(prefName);
+ } else {
+ urlStr = JSONURLDefault;
+ preferences.set(prefName, JSONURLDefault);
+ }
+
+ // Randomize URL to avoid caching
+ // TODO see https://fedorahosted.org/bugzilla-triage-scripts/ticket/21
+ // for more thorough discussion and possible further improvement
+ urlStr += (urlStr.match(/\?/) == null ? "?" : "&") + (new Date()).getTime();
+
+ Request({
+ url: urlStr,
+ onComplete: function (response) {
+ if (response.status == 200) {
+ config.gJSONData = response.json;
+
+ // Get additional tables
+ if ("downloadJSON" in config.gJSONData.configData) {
+ var URLsList = config.gJSONData.configData.downloadJSON;
+ var dwnldObj = "";
+ URLsList.forEach(function (arr) {
+ var title = arr[0];
+ var url = arr[1];
+ Request({
+ url: url,
+ onComplete: function(response) {
+ if (response.status == 200) {
+ config.constantData[title] = response.json;
+ }
+ }
+ }).get();
+ });
+ }
+
+ // config.logger = new logger.Logger(JSON.parse(
+ // self.data.load("bugzillalabelAbbreviations.json")));
+
+ config.configData = {};
+ config.configData.matches = config.gJSONData.configData.matches;
+ config.configData.skipMatches = config.configData.matches.map(function(x) {
+ return x.replace("show_bug.cgi.*","((process|post)_bug|attachment)\.cgi$");
+ });
+
+ // config.objConstructor = {};
+ // var bzType = config.gJSONData.configData.objectStyle;
+ // if (bzType === "RH") {
+ // config.objConstructor = require("rhbzpage").RHBugzillaPage;
+ // } else if (bzType === "MoFo") {
+ // }
+ // config.objConstructor = require("mozillabzpage").MozillaBugzilla;
+
+ config.constantData = {};
+ // TODO this is important and missing
+ if ("constantData" in config.gJSONData) {
+ config.constantData = config.gJSONData.constantData;
+ config.constantData.queryUpstreamBug = JSON.parse(
+ selfMod.data.load("queryUpstreamBug.json"));
+ config.constantData.XMLRPCData = JSON.parse(
+ selfMod.data.load("XMLRPCdata.json"));
+ config.constantData.bugzillaLabelNames =
+ JSON.parse(selfMod.data.load("bugzillalabelNames.json"));
+ config.constantData.newUpstreamBug =
+ JSON.parse(selfMod.data.load("newUpstreamBug.json"));
+ config.constantData.ProfessionalProducts =
+ JSON.parse(selfMod.data.load("professionalProducts.json"));
+ }
+
+ if ("CCmaintainer" in config.constantData) {
+ config.configData.defBugzillaMaintainerArr = config.constantData.CCmaintainer;
+ }
+
+ if ("suspiciousComponents" in config.gJSONData.configData) {
+ config.configData.suspiciousComponents =
+ config.gJSONData.configData.suspiciousComponents;
+ }
+
+ if ("XorgLogAnalysis" in config.gJSONData.configData) {
+ config.configData.xorglogAnalysis =
+ config.gJSONData.configData.XorgLogAnalysis;
+ }
+
+ if ("submitsLogging" in config.gJSONData.configData &&
+ config.gJSONData.configData.submitsLogging) {
+ console.log("initialize : submitsLogin = " +
+ config.gJSONData.configData.submitsLogging);
+ logger.initialize(JSON.parse(selfMod.data.load(
+ "bugzillalabelAbbreviations.json")));
+ }
+ }
+ callback();
+ }
+ }).get();
+}
diff --git a/lib/logger.js b/lib/logger.js
index f64a6e9..94f7031 100644
--- a/lib/logger.js
+++ b/lib/logger.js
@@ -4,44 +4,52 @@
var urlMod = require("url");
var utilMod = require("util");
var fileMod = require("file");
-var Color = require("color").Color;
var tabs = require("tabs");
var prompts = require("prompts");
var apiUtils = require("api-utils");
var xrpc = require("xmlrpc");
var myStorage = require("simple-storage");
+var libbz = require("libbugzilla");
-var Logger = exports.Logger = function Logger(abbsMap) {
- this.EmptyLogsColor = new Color(0, 255, 0);
- this.FullLogsColor = new Color(0, 40, 103);
+var EmptyLogsColor = "rgb(0, 255, 0)";
+var FullLogsColor = "rgb(0, 40, 103)";
+var abbsMap = {};
+
+exports.initialize = function initialize(aMap) {
if (!myStorage.storage.logs) {
myStorage.storage.logs = {};
}
+ abbsMap = aMap;
+};
- this.abbsMap = abbsMap;
+exports.addLogRecord = function addLogRecord(rec) {
+ if (myStorage.storage.logs[rec.key]) {
+ myStorage.storage.logs[rec.key].comment += "<br/>\n" + comment;
+ } else {
+ myStorage.storage.logs[rec.key] = rec;
+ }
};
-Logger.prototype.size = function size() {
+function storeSize() {
var size = 0, key;
for (key in myStorage.storage.logs) {
size++;
}
return size;
-};
+}
-Logger.prototype.isEmpty = function isEmpty() {
- return (this.size() === 0);
-};
+function isEmpty() {
+ return (storeSize() === 0);
+}
-Logger.prototype.clearStore = function clearStore(clearLink) {
+exports.clearTimeSheet = function clearTimeSheet() {
myStorage.storage.logs = {};
- var size = this.size();
- clearLink.style.color = this.EmptyLogsColor;
- clearLink.style.fontWeight = "normal";
+ var size = storeSize();
};
-Logger.prototype.importOtherStore = function importOtherStore (filename, clearLink) {
+exports.importTimeSheet = function importTimeSheet() {
+ var filename = prompts.promptFileOpenPicker();
if (fileMod.exists(filename)) {
var otherTS = JSON.parse(fileMod.read(filename));
if (otherTS.logs) {
@@ -54,57 +62,40 @@ Logger.prototype.importOtherStore = function importOtherStore (filename, clearLi
} else {
console.error("File " + filename + " doesn't exist!");
}
- if (this.size() > 0) {
- clearLink.style.color = this.FullLogsColor;
- clearLink.style.fontWeight = "bolder";
- }
};
-Logger.prototype.addLogRecord = function addLogRecord(page) {
- var rec = {};
- rec.date = new Date();
- rec.url = page.doc.location.toString();
- rec.title = page.title;
- var comment = prompts.prompt(
- "Enter comments for this comment");
- if (comment && comment.length > 0) {
- comment = comment.trim();
- rec.comment = comment;
- var dateStr = utilMod.getISODate(rec.date);
- var urlStr = urlMod.URL(rec.url).host;
- var recKey = dateStr + "+"
- + urlStr
- + "+" + page.bugNo;
-
- if (myStorage.storage.logs[recKey]) {
- myStorage.storage.logs[recKey].comment += "<br/>\n" + comment;
- } else {
- myStorage.storage.logs[recKey] = rec;
- }
- }
- return comment;
-};
-
-Logger.prototype.getBugzillaAbbr = function(url) {
+function getBugzillaAbbr(url) {
// for https://bugzilla.redhat.com/show_bug.cgi?id=579123 get RH
// for https://bugzilla.mozilla.org/show_bug.cgi?id=579123 get MoFo
- var abbr = this.abbsMap[urlMod.URL(url).host];
- return abbr;
-};
+ return abbsMap[urlMod.URL(url).host];
+}
+
+exports.generateTimeSheet = function generateTimeSheet() {
+ var docHTML = timeSheetRecordsPrinter(myStorage.storage.logs);
+ libbz.openURLInNewTab("data:text/html;charset=utf-8," + docHTML);
+};
-Logger.prototype.timeSheetRecordsPrinter = function(body, records) {
- var that = this;
+function timeSheetRecordsPrinter(records) {
var commentBugRE = new RegExp("[bB]ug\\s+([0-9]+)","g");
// sort the records into temporary array
var tmpArr = [];
+ var outStr = '<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">' +
+ "<html><head><title>Status report</title></head><body>" +
+ "<h1>TimeSheet</h1>\n";
- for ( var i in records) {
+ for (var i in records) {
if (records.hasOwnProperty(i)) {
tmpArr.push( [ i, records[i] ]);
}
}
tmpArr.sort(function(a, b) {
- return a[0] > b[0] ? 1 : -1;
+ if (a[0] > b[0]) {
+ return 1;
+ } else if (a[0] < b[0]) {
+ return -1;
+ } else {
+ return 0;
+ }
});
var currentDay = "";
@@ -113,47 +104,24 @@ Logger.prototype.timeSheetRecordsPrinter = function(body, records) {
var x = rec[1];
var dayStr = utilMod.getISODate(x.date);
var host = urlMod.URL(x.url).host;
- var BZName = that.getBugzillaAbbr(x.url);
+ var BZName = getBugzillaAbbr(x.url);
var bugNo = utilMod.getBugNo(x.url);
if (dayStr != currentDay) {
currentDay = dayStr;
- body.innerHTML += "<hr/><p><strong>" + currentDay
- + "</strong></p>";
+ outStr += "<hr/><p><strong>" + currentDay
+ + "</strong></p>\n";
}
// replace "bug ####" with a hyperlink to the current bugzilla
var comment = x.comment.replace(commentBugRE,
"<a href='http://"+host+"/show_bug.cgi?id=$1'>$&</a>");
- body.innerHTML += "<p><em><a href='"
+ outStr += "<p><em><a href='"
+ x.url
+ "'>Bug "
+ BZName + "/" + bugNo + ": "
+ x.title
+ "</a>"
- + " </em>\n<br/>" + comment + "</p>";
- });
- };
-
-/**
- *
- */
-Logger.prototype.createBlankPage = function (ttl, bodyBuildCB) {
- var title = ttl || "Yet another untitled page";
- var that = this;
-
- var logTab = tabs.open({
- url: "about:blank",
- inBackground: true,
- onOpen: function (tab) {
- var otherDoc = tab.contentDocument;
- otherDoc.title = title;
- otherDoc.body.innerHTML = "<h1>" + title + "</h1>";
- bodyBuildCB.call(that, otherDoc.body);
- tabs.activeTab = tab;
- }
+ + " </em>\n<br/>" + comment + "</p>\n";
});
-};
-
-Logger.prototype.generateTimeSheet = function(body) {
- var doc = body.ownerDocument;
- this.timeSheetRecordsPrinter(body, myStorage.storage.logs);
-};
+ outStr += "</body></html>";
+ return outStr;
+}
diff --git a/lib/main.js b/lib/main.js
index fbabd41..accaa0e 100644
--- a/lib/main.js
+++ b/lib/main.js
@@ -1,4 +1,3 @@
-/*jslint rhino: true, forin: true, onevar: false, browser: true, evil: true, laxbreak: true, undef: true, nomen: true, eqeqeq: false, bitwise: true, maxerr: 1000, immed: false, white: false, plusplus: false, regexp: false, undef: false */
// Released under the MIT/X11 license
// http://www.opensource.org/licenses/mit-license.php
//
@@ -11,17 +10,13 @@
// http://ehsanakhgari.org/blog/2010-05-31/my-experience-jetpack-sdk#comment-1253
//
"use strict";
-var logger = require("logger");
var browser = require("tab-browser");
-var selfMod = require("self");
-var Request = require("request").Request;
-var preferences = require("preferences-service");
-var BTSPrefNS = require("bzpage").BTSPrefNS;
-// Use my JSON for now before it is fixed for general public
-var JSONURLDefault = "https://fedorahosted.org/released"+
- "/bugzilla-triage-scripts/Config_data.json";
-
-var config = {};
+var self = require("self");
+var pageMod = require("page-mod");
+var libbz = require("libbugzilla");
+var tabs = require("tabs");
+var logger = require("logger");
+var Message = require("util").Message;
function isOurPage(window, matchingURLs) {
var url = window.location.href;
@@ -47,88 +42,103 @@ function skipThisPage(doc) {
}
}
-function initialize(callback) {
- var prefName = BTSPrefNS+"JSONURL";
- var urlStr = "";
-
- if (preferences.isSet(prefName)) {
- urlStr = preferences.get(prefName);
- } else {
- urlStr = JSONURLDefault;
- preferences.set(prefName, JSONURLDefault);
+var messageHandler = exports.messageHandler = function messageHandler(worker, msg) {
+ switch (msg.cmd) {
+ case "LogMessage":
+ console.log(msg.data);
+ break;
+ case "ExecCmd":
+ libbz.executeCommand(msg.data);
+ break;
+ case "AddLogRecord":
+ logger.addLogRecord(msg.data);
+ break;
+ case "GenerateTS":
+ logger.generateTimeSheet();
+ break;
+ case "ClearTS":
+ logger.clearTimeSheet();
+ break;
+ case "ImportTS":
+ logger.importTimeSheet();
+ break;
+ case "GetInstalledPackages":
+ // send message with packages back
+ libbz.getInstalledPackages(msg.data, function (pkgsMsg) {
+ worker.postMessage(pkgsMsg);
+ });
+ break;
+ case "GetClipboard":
+ libbz.getClipboard(function (clipboard) {
+ worker.postMessage(new Message(msg.data, clipboard));
+ });
+ break;
+ case "ChangeJSONURL":
+ libbz.changeJSONURL();
+ break;
+ case "OpenURLinPanel":
+ libbz.openURLInNewPanel(msg.data);
+ break;
+ case "OpenURLinTab":
+ libbz.openURLInNewTab(msg.data);
+ break;
+ case "OpenStringInPanel":
+ libbz.openStringInNewPanel(msg.data);
+ break;
+ case "MakeXMLRPCall":
+ // url, login, method, params, callback
+ libbz.makeXMLRPCCall(msg.data.url, msg.data.login, msg.data.method,
+ msg.data.params, function(ret) {
+ worker.postMessage(new Message(msg.data.callRPC, ret));
+ });
+ break;
+ case "GetURL":
+ libbz.getURL(msg.data.url, function(stuff) {
+ worker.postMessage(new Message(msg.data.backMessage, stuff));
+ });
+ break;
+ case "OpenBugUpstream":
+ libbz.createUpstreamBug(msg.data.url, msg.data.subject, msg.data.comment);
+ break;
+ case "testReady":
+ // we ignore it here, interesting only in unit test
+ break;
+ default:
+ console.error(msg.toSource());
}
+};
- // Randomize URL to avoid caching
- // TODO see https://fedorahosted.org/bugzilla-triage-scripts/ticket/21
- // for more thorough discussion and possible further improvement
- urlStr += (urlStr.match(/\?/) == null ? "?" : "&") + (new Date()).getTime();
-
- Request({
- url: urlStr,
- onComplete: function (response) {
- if (response.status == 200) {
- config.gJSONData = response.json;
-
- // Get additional tables
- if ("downloadJSON" in config.gJSONData.configData) {
- var URLsList = config.gJSONData.configData.downloadJSON;
- var dwnldObj = "";
- URLsList.forEach(function (arr) {
- var title = arr[0];
- var url = arr[1];
- Request({
- url: url,
- onComplete: function(response) {
- if (response.status == 200) {
- config.gJSONData.constantData[title] = response.json;
- }
- }
- }).get();
- }, this);
- }
-
- config.logger = new logger.Logger(JSON.parse(selfMod.data.load("bugzillalabelAbbreviations.json")));
-
- config.matches = config.gJSONData.configData.matches;
- config.skipMatches = config.matches.map(function(x) {
- return x.replace("show_bug.cgi.*","((process|post)_bug|attachment)\.cgi$");
- });
-
- config.objConstructor = {};
- var bzType = config.gJSONData.configData.objectStyle;
- if (bzType === "RH") {
- config.objConstructor = require("rhbzpage").RHBugzillaPage;
- } else if (bzType === "MoFo") {
- config.objConstructor = require("mozillabzpage").MozillaBugzilla;
- }
+var contentScriptLibraries = {
+ "bugzilla.redhat.com": [
+ self.data.url("lib/util.js"),
+ self.data.url("lib/color.js"),
+ self.data.url("lib/rhbzpage.js"),
+ self.data.url("lib/bzpage.js")
+ ]
+};
- callback(config);
- }
+libbz.initialize(libbz.config, function () {
+ pageMod.PageMod({
+ include: [
+ "https://bugzilla.redhat.com/show_bug.cgi?id=*"
+ ],
+ contentScriptWhen: 'ready',
+ contentScriptFile: contentScriptLibraries["bugzilla.redhat.com"],
+ onAttach: function onAttach(worker, msg) {
+ worker.on('message', function (msg) {
+ messageHandler(worker, msg);
+ });
}
- }).get();
-}
+ });
+});
-exports.main = function main(options, callbacks) {
- initialize(function (config) {
- browser.whenContentLoaded(
- function(window) {
- // is this good for anything?
- if ("window" in window) { window = window.window; }
+pageMod.PageMod({
+ include: [
+ "https://bugzilla.redhat.com/process_bug.cgi",
+ "https://bugzilla.redhat.com/attachment.cgi"
+ ],
+ contentScriptWhen: 'ready',
+ contentScriptFile: self.data.url("lib/skip-bug.js")
+});
- if (isOurPage(window, config.matches)) {
- try {
- var curPage = new config.objConstructor(window, config);
- } catch (ex) {
- if (ex instanceof require("bzpage").NotLoggedinException) {
- return ; // Bail out if the user is not logged in
- } else {
- throw ex; // rethrow the exception otherwise
- }
- }
- } else if (isOurPage(window, config.skipMatches)) {
- skipThisPage(window.document);
- }
- }
- );
- });
-};
+// tabs.open("https://bugzilla.redhat.com/show_bug.cgi?id=679515");
diff --git a/lib/mozillabzpage.js b/lib/mozillabzpage.js
deleted file mode 100644
index 31f6332..0000000
--- a/lib/mozillabzpage.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Released under the MIT/X11 license
-// http://www.opensource.org/licenses/mit-license.php
-"use strict";
-var utilMod = require("util");
-var apiUtils = require("api-utils");
-var BZPage = require("bzpage").BZPage;
-
-// ============================================================================
-// MozillaBugzilla object
-
-var MozillaBugzilla = function MozillaBugzilla (doc, config) {
- BZPage.call(this, doc, config);
-};
-
-MozillaBugzilla.prototype = utilMod.heir(BZPage);
-MozillaBugzilla.prototype.constructor = MozillaBugzilla;
-
-// exports.MozillaBugzilla = apiUtils.publicConstructor(MozillaBugzilla);
-exports.MozillaBugzilla = MozillaBugzilla; \ No newline at end of file
diff --git a/lib/passwords.js b/lib/passwords.js
index cc9c16b..af76f47 100644
--- a/lib/passwords.js
+++ b/lib/passwords.js
@@ -1,4 +1,3 @@
-/*jslint forin: true, rhino: true, onevar: false, browser: true, evil: true, laxbreak: true, undef: true, nomen: true, eqeqeq: true, bitwise: true, maxerr: 1000, immed: false, white: false, plusplus: false, regexp: false, undef: false */
// Released under the MIT/X11 license
// http://www.opensource.org/licenses/mit-license.php
"use strict";
diff --git a/lib/prompts.js b/lib/prompts.js
index d4a5293..ed9b3e5 100644
--- a/lib/prompts.js
+++ b/lib/prompts.js
@@ -97,9 +97,10 @@ exports.promptYesNoCancel = function promptOKNoCancel(prompt) {
* documentation is https://developer.mozilla.org/en/NsIFilePicker
*/
exports.promptFileOpenPicker = function promptFilePicker (win) {
+ var window = require("window-utils").activeWindow;
var fp = Cc["@mozilla.org/filepicker;1"]
.createInstance(Ci.nsIFilePicker);
- fp.init(win, "JSON File Open", Ci.nsIFilePicker.modeOpen);
+ fp.init(window, "JSON File Open", Ci.nsIFilePicker.modeOpen);
fp.appendFilter("JSON files", "*.json");
fp.appendFilters(Ci.nsIFilePicker.filterAll);
fp.filterIndex = 0;
diff --git a/lib/rhbzpage.js b/lib/rhbzpage.js
deleted file mode 100644
index 10090a7..0000000
--- a/lib/rhbzpage.js
+++ /dev/null
@@ -1,1023 +0,0 @@
-/*jslint onevar: false, browser: true, evil: true, laxbreak: true, undef: true, nomen: true, eqeqeq: false, bitwise: true, maxerr: 1000, immed: false, white: false, plusplus: false, regexp: false, undef: false */
-// Released under the MIT/X11 license
-// http://www.opensource.org/licenses/mit-license.php
-"use strict";
-var util = require("util");
-var xrpc = require("xmlrpc");
-var apiUtils = require("api-utils");
-var self = require("self");
-var Color = require("color").Color;
-var BZPage = require("bzpage").BZPage;
-var Request = require("request").Request;
-var url = require("url");
-var timer = require("timer");
-var selection = require("selection");
-var tabs = require("tabs");
-var NumberOfFrames = require("bzpage").NumberOfFrames;
-var titleParsedAttachment = "Part of the thread where crash happened";
-// ====================================================================================
-// RHBugzillaPage object
-
-var RHBugzillaPage = function RHBugzillaPage(win, config) {
- // inheritance ... call superobject's constructor
- BZPage.call(this, win, config);
-
- // For identification of graphics card
- this.manuChipStrs = [ [ "ATI Radeon", "ATI", "1002" ],
- [ "ATI Mobility Radeon", "ATI", "1002" ],
- [ "Intel Corporation", "INTEL", "8086" ], [ "NVIDIA", "NV", "10de" ] ];
-
- // http://en.wikipedia.org/wiki/HSL_color_space
- // when only the value of S is changed
- // stupido!!! the string is value in hex for each color
- this.RHColor = new Color(158, 41, 43); // RGB 158, 41, 43; HSL 359, 1, 39
- this.FedoraColor = new Color(0, 40, 103); // RGB 0, 40, 103; HSL 359, 1, 39
- this.RawhideColor = new Color(0, 119, 0); // or "green", or RGB 0, 119, 0, or
- // HSL
- // 120, 0, 23
- this.RHITColor = new Color(102, 0, 102); // RGB 102, 0, 102; HSL 300, 0, 20
-
- this.RE = {
- Comment: new RegExp("^\\s*#"), // unsused
- BlankLine: new RegExp("^\\s*$"), // unused
- // new line
- // [ 65.631] (--) intel(0): Chipset: "845G"
- Chipset: new RegExp("^\\s*\\[?[ 0-9.]*\\]?\\s*\\(--\\) "+
- "([A-Za-z]+)\\([0-9]?\\): Chipset: (.*)$"),
- ATIgetID: new RegExp("^.*\\(ChipID = 0x([0-9a-fA-F]+)\\).*$"),
- Abrt: new RegExp("^\\s*\\[abrt\\]"),
- signalHandler: new RegExp("^\\s*#[0-9]*\\s*<signal handler called>"),
- frameNo: new RegExp("^\\s*#([0-9]*)\\s"),
- soughtLines: new RegExp("^\\s*(\\[[0-9 .]*\\])?\\s*(\\((EE|WW)\\)|.* [cC]hipsets?: )|\\s*Backtrace")
- };
- // END OF CONSTANTS
-
- var that = this;
- this.reqCounter = 0;
- this.signaturesCounter = 0;
- this.chipMagicInterestingLine = "";
-
- this.product = this.doc.getElementById("product").value;
-
- this.maintCCAddr = null;
- if (this.constantData.CCmaintainer) {
- this.maintCCAddr = util.filterByRegexp(this.constantData.CCmaintainer,
- this.getComponent());
- }
-
- var ITbutton = this.doc.getElementById("cf_issuetracker");
- this.its = ITbutton ? ITbutton.value.trim() : "";
-
- if (!this.constantData.ProfessionalProducts) {
- this.constantData.ProfessionalProducts =
- JSON.parse(self.data.load("professionalProducts.json"));
- }
-
- // getBadAttachments
- this.XorgLogAttList = [];
- this.XorgLogAttListIndex = 0;
- this.attachments = this.getAttachments();
- this.markBadAttachments(this.attachments);
-
- this.parsedAttachments = this.attachments.filter(function (att) {
- return (new RegExp(titleParsedAttachment).test(att[0]));
- });
-
- if (this.constantData.defaultAssignee) {
- this.setDefaultAssignee();
- }
-
- // Dig out backtrace protection against double-firing?
- this.btSnippet = "";
-
- var parseAbrtBacktraces = config.gJSONData.configData.parseAbrtBacktraces;
- if (parseAbrtBacktraces && this.RE.Abrt.test(this.title)) {
- this.pasteBacktraceInComments();
- }
-
- // Find out Xorg.0.log attachment URL
- this.XorgLogAttList = this.attachments.filter(function (value, index, array) {
- // Xorg.0.log must be text, otherwise we cannot parse it
- return (/[xX].*log/.test(value[0]) && /text/.test(value[2]));
- });
- this.addCheckXorgLogLink();
-
- // TODO Get compiz bugs as well
- if (this.constantData.PCI_ID_Array &&
- (this.XorgLogAttList[0]) &&
- (this.maintCCAddr === "xgl-maint@redhat.com")) {
- // Add find chip magic button
- var whiteboard_string = this.doc.getElementById("status_whiteboard").value;
- if (!/card_/.test(whiteboard_string)) {
- this.fillInChipMagic();
- }
- }
-
- // Take care of signature for Fedora bugzappers
- if (config.gJSONData.configData.signature.length > 0) {
- var signatureFedoraString = config.gJSONData.configData.signature;
- this.doc.forms.namedItem("changeform").addEventListener("submit",
- function(aEvt) {
- if (that.signaturesCounter < 1) {
- that.addStuffToTextBox("comment", signatureFedoraString);
- that.signaturesCounter += 1;
- }
- }, false);
- }
-
- this.setBranding();
-
- // set default assignee on change of the component
- var compElement = this.doc.getElementById("component");
- if (compElement && (compElement.options)) {
- this.doc.getElementById("component").addEventListener("change",
- function() {
- that.changeAssignee("default");
- }, false);
- }
-
-}; // END OF RHBugzillaPage CONSTRUCTOR
-
-RHBugzillaPage.prototype.toString = function toString () {
- return ("[Object RHBugzillaPage]");
-};
-
-RHBugzillaPage.prototype = util.heir(BZPage);
-RHBugzillaPage.prototype.constructor = RHBugzillaPage;
-
-/**
- * Find default assignee based on the current component
- *
- * @return String what would be a default assignee if
- * we haven't set it up.
- */
-RHBugzillaPage.prototype.getDefaultAssignee = function() {
- return util.filterByRegexp(this.constantData.defaultAssignee,
- this.getComponent()).toLowerCase();
-};
-
-/**
- * Set default assignee
- *
- * @return none
- * sets this.defaultAssignee property according to defaultAssignee list
- */
-RHBugzillaPage.prototype.setDefaultAssignee = function() {
- this.defaultAssignee = this.getDefaultAssignee();
- var defAss = this.defaultAssignee;
-
- // Add setting default assignee
- if ((defAss.length > 0) && (defAss !== this.getOwner())) {
- this.constantData.defaultAssigneeTrigger = true;
- this.createNewButton("bz_assignee_edit_container",true,"rh-common","setDefaultAssignee");
- }
-};
-
-/**
- * Auxiliary function to compute more complicated resolution
- */
-RHBugzillaPage.prototype.closeSomeRelease = function() {
- // for RAWHIDE close as RAWHIDE,
- // if active selection -> CURRENTRELEASE
- // and put the release version to
- // "Fixed in Version" textbox
- // otherwise -> NEXTRELEASE
- this.selectOption("bug_status", "CLOSED");
- var text = "";
- var resolution = "";
-
- if (selection.text) {
- text = selection.text.trim();
- }
- if (text.length > 0) {
- resolution = "CURRENTRELEASE";
- this.doc.getElementById("cf_fixed_in").value = text;
- } else if (this.doc.getElementById("version").value === "rawhide") {
- resolution = "RAWHIDE";
- } else {
- resolution = "NEXTRELEASE";
- }
- this.centralCommandDispatch("resolution", resolution);
-};
-
-/**
- * Additional commands specific for this subclass, overriding superclass one.
- */
-RHBugzillaPage.prototype.centralCommandDispatch = function(cmdLabel, cmdParams) {
- console.log("cmdLabel = " + cmdLabel + ", cmdParams = " + cmdParams);
- switch (cmdLabel) {
- // Set up our own commands
- case "closeUpstream":
- this.addClosingUpstream();
- break;
- case "computeResolution":
- this.closeSomeRelease();
- break;
- case "queryStringUpstreamBugzilla":
- this.queryUpstream();
- break;
- case "sendBugUpstream":
- this.sendBugUpstream();
- break;
- case "markTriaged":
- this.markBugTriaged();
- break;
- case "chipMagic":
- var splitArr = cmdParams.split("\t");
- this.fillInWhiteBoard(splitArr[0], splitArr[1]);
- break;
- // If we don't have it here, call superclass method
- default:
- BZPage.prototype.centralCommandDispatch.call(this, cmdLabel, cmdParams);
- break;
- }
-};
-
-/**
- *
- * This has to stay in RHBugzillaPage because upstream doesn't have addAttachment
- * XML-RPC call yet.
- */
-RHBugzillaPage.prototype.addAttachment = function addAttachment(data, callback, param) {
- var msg = new xrpc.XMLRPCMessage("bugzilla.addAttachment");
- var that = this;
-
- msg.addParameter(this.bugNo);
- msg.addParameter({
- description: titleParsedAttachment,
- filename: "parsed-backtrace.txt",
- contenttype: "text/plain",
- data: this.win.btoa(data),
- nomail: true
- });
- msg.addParameter(this.login);
- msg.addParameter(this.password);
-
- Request({
- url: this.constantData.XMLRPCData[this.hostname].url,
- onComplete: function(response) {
- if (response.status == 200) {
- var resp = util.parseXMLfromString(response.text);
- var newAttachID = parseInt(resp.params.param.value.array.data.value.int, 10);
- console.log("attachID = " + newAttachID);
- callback.call(that, param, newAttachID, data.length);
- }
- },
- content: msg.xml(),
- contentType: "text/xml"
- }).post();
- this.reqCounter++;
-};
-
-/* === Bugzilla functions === */
-/**
- *
- */
-RHBugzillaPage.prototype.pasteBacktraceInComments = function() {
- var that = this;
-
- /*
- Let's comment it out, and we'll see if anything breaks.
- TODO This paragraph looks suspicous ... what is it?
- Does it belong to this function?
- var notedLabel = this.doc.querySelector("label[for='newcc']");
- while (notedLabel.firstChild) {
- var node = notedLabel.removeChild(notedLabel.firstChild);
- notedLabel.parentNode.insertBefore(node, notedLabel);
- }
- notedLabel.parentNode.removeChild(notedLabel);
- */
-
- var abrtQueryURL = "https://bugzilla.redhat.com/buglist.cgi?" +
- "cmdtype=dorem&remaction=run&namedcmd=all%20NEW%20abrt%20crashes&"+
- "sharer_id=74116";
-
- var mainTitle = this.doc
- .getElementsByClassName("bz_alias_short_desc_container")[0];
-
- var abrtButton = this.doc.createElement("a");
- abrtButton.setAttribute("accesskey", "a");
- abrtButton.setAttribute("href", abrtQueryURL);
- abrtButton.textContent = "Abrt bugs";
- mainTitle.appendChild(abrtButton);
-
- if (this.idContainsWord("cf_devel_whiteboard", 'btparsed')) {
- this.addStuffToTextBox('status_whiteboard', 'btparsed');
- }
-
- if (!(this.isTriaged() || this.idContainsWord("status_whiteboard",
- 'btparsed') || (this.parsedAttachments.length > 0))) {
- var btAttachments = this.attachments
- .filter(function(att, idx, arr) {
- return (/File: backtrace/.test(att[0]));
- });
- // TODO we need to go through all backtrace attachments, but
- // just the first one will do for now, we would need to do async
- // parsing
- btAttachments.forEach(function(x) {
- var attURL = "https://bugzilla.redhat.com/attachment.cgi?id="
- + x[1];
- if ((!this.btSnippet) &&
- (!this.idContainsWord("status_whiteboard", 'btparsed'))) {
- var that = this;
- Request({
- url: attURL,
- onComplete: function(response) {
- if (response.status == 200) {
- that.btSnippet = that.parseBacktrace(response.text);
- if (that.btSnippet) {
- that.addCheckShowLink.call(that,x,that.btSnippet);
- }
- }
- }
- }).get();
- }
- }, this);
- }
- // Add "show BT" links
- if (this.parsedAttachments.length > 0) {
- this.parsedAttachments.forEach(function (att) {
- that.addShowParsedBTLink(att);
- }, that);
- }
-};
-
-/**
- * Open new window with the content of the attachment.
- *
- * @param id Number of the attachment id
- * @return none
- */
-RHBugzillaPage.prototype.showAttachment = function showAttachment(id) {
- var that = this;
- Request({
- url: "https://" + that.hostname + "/attachment.cgi?id=" + id,
- onComplete: function (response) {
- if (response.status == 200) {
- var infoWin = that.win.open("", "Check att. " + id,
- "width=640,height=640,status=no,location=no,"+
- "titlebar=no,scrollbars=yes,resizable=yes"+
- "alwaysRaised=yes");
- var doc = infoWin.document;
- doc.body.innerHTML = "<pre id='textPre'>"+
- response.text + "</pre>";
- }
- }
- }).get();
-};
-
-/**
- * add a link opening a window with the parsed backtrace
- *
- * @param att Attachment object
- */
-RHBugzillaPage.prototype.addShowParsedBTLink = function addShowParsedBTLink(att) {
- var elem = att[4].querySelector("td:last-of-type");
- this.createDeadLink("showParsedBacktraceWindow-" + att[1], "showBT",
- elem, this.showAttachment, att[1], true);
-};
-
-/**
- * Unfinished ... see above
- */
-RHBugzillaPage.prototype.addNewAttachmentRow = function addNewAttachmentRow(origAtt,
- newAttId, newAttSize) {
- var that = this;
- var oldAddBTLink = this.doc.getElementById("attachBacktraceActivator");
- oldAddBTLink.parentNode.removeChild(oldAddBTLink);
- var newTRElem = origAtt[4].cloneNode(true);
-
- // fix number of the attachment
- Array.forEach(newTRElem.getElementsByTagName("a"), function (aEl) {
- aEl.setAttribute("href",
- aEl.getAttribute("href").replace(origAtt[1], newAttId));
- });
-
- var aElements = newTRElem.getElementsByTagName("a");
- aElements[0].setAttribute("name","parsed-backtrace.txt");
- aElements[0].getElementsByTagName("b")[0].textContent = titleParsedAttachment;
-
- var sizeSpan = newTRElem.getElementsByClassName("bz_attach_extra_info")[0];
- sizeSpan.textContent = "(" + (newAttSize / 1024).toFixed(2) + " KB, text/plain)";
-
- // aElements[1].textContent = new Date().toString(); TODO we should add eventually, but not pressing
-
- var vcardSpan = newTRElem.getElementsByClassName("vcard")[0];
- if (vcardSpan !== undefined) {
- var vcardSpanClassList = vcardSpan.classList;
- if (/@redhat\.com/.test(this.login) && !vcardSpanClassList.contains("redhat_user")) {
- vcardSpanClassList.add("redhat_user");
- }
- var vcardAElem = vcardSpan.getElementsByTagName("a")[0];
- vcardAElem.setAttribute("title", this.login);
- vcardAElem.setAttribute("href", "mailto:" + this.login);
- vcardAElem.className = "email";
- vcardAElem.innerHTML="<span class='fn'>" + this.login + "</span>";
- }
-
- var elem = newTRElem.querySelector("td:last-of-type");
- this.createDeadLink("showBacktrace", "show BT", elem,
- this.showAttachment, newAttId, false);
-
- origAtt[4].parentNode.insertBefore(newTRElem, origAtt[4].nextSibling);
-};
-
-/**
- * Add a link to create a new attachment with a parsed backtrace
- *
- * @param oldAtt Object with an attachment row
- * @param snippet String with parsed backtrace
- * @return none
- */
-RHBugzillaPage.prototype.addCheckShowLink = function addCheckShowLink(oldAtt, snippet) {
- var that = this;
- var elem = oldAtt[4].querySelector("td:last-of-type");
- this.createDeadLink("attachBacktraceActivator", "add parsed BT", elem, function(x) {
- // pass function and parameters as two separate parameters, the function to be called from
- // addAttachment
- that.addAttachment.call(that, snippet, this.addNewAttachmentRow, oldAtt);
- }, [], true);
-};
-
-/**
- * Make it sailent that the some attachments with bad MIME type are present
- *
- * @param atts Array of attachments subarrays
- * @return none
- */
-RHBugzillaPage.prototype.markBadAttachments = function markBadAttachments(atts) {
- var that = this;
- var badMIMEArray = [ "application/octet-stream", "text/x-log", "undefined" ];
- if (!this.password) {
- return ; // User didn't provide password, so whole MIME fixing business
- // should be switched off.
- }
-
- var badAttachments = atts.filter(function(att, idx, arr) {
- return (util.isInList(att[2], badMIMEArray));
- });
-
- if (badAttachments.length > 0) {
- var titleElement = this.doc
- .getElementsByClassName("bz_alias_short_desc_container")[0];
- titleElement.style.backgroundColor = "olive";
-
- this.createDeadLink("fixAllButton", "Fix all", titleElement, function() {
- Array.forEach(badAttachments, function(x) {
- this.fixAttachById(x[1]);
- }, that);
- }, [], false, null, "f");
- badAttachments.forEach(function(x, i, a) {
- this.addTextLink(x);
- }, this);
- }
-};
-
-/**
- * Is this bug a RHEL bug?
- *
- * @return Boolean true if it is a RHEL bug
- */
-RHBugzillaPage.prototype.isEnterprise = function() {
- var prod = this.product;
- var result = this.constantData.ProfessionalProducts.some(function(elem,idx,arr) {
- return new RegExp(elem).test(prod);
- });
- return result;
-};
-
-/**
- * Find out whether the bug is needed an attention of bugZappers
- *
- * @return Boolean whether the bug has been triaged or not
- */
-RHBugzillaPage.prototype.isTriaged = function() {
- return this.hasKeyword("Triaged");
-};
-
-/**
- * Set branding colours to easily distinguish between Fedora and RHEL bugs
- *
- * @param brand String with product of the current bug
- * @param version String with the version of the bug
- * @param its String with the IsueTracker numbers
- * @return none
- */
-RHBugzillaPage.prototype.setBranding = function() {
- var brandColor = {};
- var TriagedColor = {};
-
- if (this.isEnterprise()) {
- if (this.its && (this.its.length > 0)) {
- brandColor = this.RHITColor;
- } else {
- brandColor = this.RHColor;
- }
- } else if (new RegExp("Fedora").test(this.product)) {
- if (this.doc.getElementById("version").value === "rawhide") {
- brandColor = this.RawhideColor;
- } else {
- brandColor = this.FedoraColor;
- }
- }
-
- // Comment each of the following lines to get only partial branding
- this.doc.getElementsByTagName("body")[0].style.background = brandColor
- .toString()
- + " none";
- this.doc.getElementById("titles").style.background = brandColor.toString()
- + " none";
-
- // Remove "Bug" from the title of the bug page, so we have more space with
- // plenty of tabs
- var titleElem = this.doc.getElementsByTagName("title")[0];
-
- titleElem.textContent = titleElem.textContent.slice(4);
- var bodyTitleParent = this.doc.getElementById("summary_alias_container").parentNode;
- var bodyTitleElem = bodyTitleParent.getElementsByTagName("b")[0];
- bodyTitleElem.textContent = bodyTitleElem.textContent.slice(4);
-
- // Make background-color of the body of bug salmon pink
- // for security bugs.
- if (this.hasKeyword("Security")) {
- this.doc.getElementById("bugzilla-body").style.background = this.SalmonPink
- .toString() + ' none';
- }
-
- // Make it visible whether the bug has been triaged
- if (this.isTriaged()) {
- this.doc.getElementById("bz_field_status").style.background = brandColor
- .lightColor().toString()
- + " none";
- }
-
- // we should make visible whether maintCCAddr is in CCList
- if (util.isInList(this.maintCCAddr, this.CCList)) {
- var ccEditBoxElem = this.doc.getElementById("cc_edit_area_showhide");
- ccEditBoxElem.style.color = "navy";
- ccEditBoxElem.style.fontWeight = "bolder";
- ccEditBoxElem.style.textDecoration = "underline";
- }
-
- // mark suspicious components
- var compElems;
- if (this.suspiciousComponents
- && util.isInList(this.getComponent(), this.suspiciousComponents)
- && (compElems = this.doc
- .getElementById("bz_component_edit_container"))) {
- compElems.style.background = "red none";
- }
-};
-
-/**
- * Search simple query in the upstream bugzilla appropriate for the component
- *
- * @return none
- */
-RHBugzillaPage.prototype.queryUpstream = function() {
- var text = this.getSelectionOrClipboard();
- if (text) {
- var queryUpstreamBugsURLArray = this.constantData.queryUpstreamBug;
- var searchData = util.filterByRegexp(queryUpstreamBugsURLArray, this.getComponent());
- var urlBase = searchData.url;
- text = searchData.searchBy+":"+searchData.fillIn+" "+text.trim();
- if (searchData.fillIn == "$$$") {
- text = text.replace("$$$", this.getComponent());
- }
- text = encodeURIComponent(text).replace("%20","+");
- tabs.open({
- url: urlBase + text,
- inBackground: true,
- onOpen: function (tab) {
- tabs.activeTab = tab;
- }
- });
- }
-};
-
-/**
- * Open a tab in the upstream bugzilla to create a new bug
- *
- * @return none
- */
-RHBugzillaPage.prototype.sendBugUpstream = function() {
- var that = this;
- var urlStr = util.filterByRegexp(JSON.parse(self.data.load("newUpstreamBug.json")), this
- .getComponent());
-
- tabs.open({
- url: urlStr,
- inBackground: true,
- onOpen: function (tab) {
- var otherDoc = tab.contentDocument;
- var otherElems = otherDoc.forms.namedItem("Create").elements;
- otherElems.namedItem("short_desc").value = that.doc
- .getElementById("short_desc_nonedit_display").textContent
- .trim();
- otherElems.namedItem("comment").value = that.collectComments();
- tabs.activeTab = tab;
- }
- });
-};
-
-/**
- * Add a link opening selected lines of Xorg.0.log
- *
- * @return none
- */
-RHBugzillaPage.prototype.addCheckXorgLogLink = function addCheckXorgLogLink() {
- var that = this;
- if (this.xorglogAnalysis) {
- this.XorgLogAttList.forEach(function (row) {
- var elemS = row[4].getElementsByTagName("td");
- var elem = elemS[elemS.length - 1];
- that.createDeadLink("xorgLogAnalyzeLink", "check", elem,
- that.analyzeXorgLog, row[1], "br");
- });
- }
-};
-
-/**
- * Given line to be parsed, find out which chipset it is and fill in the
- * whiteboard
- *
- * @param iLine String with the whole unparsed "interesting line"
- * @param driverStr String with the driver name
- * @return None
- */
-RHBugzillaPage.prototype.fillInWhiteBoard = function(iLine, driverStr) {
- var that = this;
-
- function groupIDs(manStr, cardStrID) {
- var outStr = util.filterByRegexp(that.constantData.chipIDsGroupings,
- manStr + "," + cardStrID);
- if (outStr.length === 0) {
- outStr = "UNGROUPED_" + manStr + "/" + cardStrID;
- }
- return outStr;
- }
-
- /**
- * Given PCI IDs for manufacturer and card ID return chipset string
- *
- * @param manufacturerNo String with manufacturer PCI ID
- * @param cardNo String with card PCI ID
- * @return Array with chip string and optinoal variants
- */
- function checkChipStringFromID(manufacturerNo, cardNo) {
- var soughtID = (manufacturerNo + "," + cardNo).toUpperCase();
- var outList = that.constantData.PCI_ID_Array[soughtID];
- if (outList) {
- return outList;
- } else {
- return "";
- }
- }
-
- var outStr = "";
- var cardIDStr = "";
- var cardIDArr = [];
-
- chipSwitchboard: if (driverStr === "RADEON") {
- var cardID = iLine.replace(this.RE.ATIgetID, "$1");
- cardIDArr = checkChipStringFromID("1002", cardID);
- if (cardIDArr.length > 0) {
- cardIDStr = cardIDArr[0];
- if (cardIDArr[1]) {
- optionStr = cardIDArr[1];
- outStr = groupIDs(driverStr, cardIDStr) + "/" + optionStr;
- } else {
- outStr = groupIDs(driverStr, cardIDStr);
- optionStr = "";
- }
- } else {
- outStr = "**** FULLSTRING: " + iLine;
- }
- } else {
- // Intel Corporation, NVIDIA
- cardIDArr = this.manuChipStrs.filter(function(el, ind, arr) {
- return new RegExp(el[0], "i").test(iLine);
- });
- if (cardIDArr && (cardIDArr.length > 0)) {
- cardIDArr = cardIDArr[0];
- } else {
- outStr = iLine;
- break chipSwitchboard;
- }
- // cardIDArr [0] = RE, [1] = ("RADEON","INTEL","NOUVEAU"), [2] = manu
- // PCIID
- iLine = iLine.replace(new RegExp(cardIDArr[0], "i")).trim();
- // nVidia developers opted-out from grouping
- if (driverStr === "INTEL") {
- outStr = groupIDs(cardIDArr[1], iLine);
- } else {
- outStr = iLine;
- }
- }
- this.addStuffToTextBox("status_whiteboard", ("card_" + outStr).trim());
- this.doc.getElementById("chipMagic_btn").style.display = "none";
-};
-
-/**
- * Get attached Xorg.0.log, parse it and find the value of chip. Does not fill
- * the whiteboard itself, just adds button to do so,paramList so that slow
- * XMLHttpRequest is done in advance.
- *
- * @return None
- */
-RHBugzillaPage.prototype.fillInChipMagic = function fillInChipMagic() {
- var that = this;
- var XorgLogURL = "";
- var XorgLogAttID = "";
- var XorgLogFound = false;
- var attURL = "", interestingLine = "";
- var interestingArray = [];
-
- if (this.XorgLogAttList.length === 0) {
- return;
- }
-
- XorgLogAttID = this.XorgLogAttList[this.XorgLogAttListIndex][1];
- attURL = "https://bugzilla.redhat.com/attachment.cgi?id="+XorgLogAttID;
-
- // parse Xorg.0.log
- Request({
- url: attURL,
- onComplete: function (response) {
- if (response.status == 200) {
- var interestingLineArr = response.text.split("\n").
- filter(function (v,i,a) {
- return that.RE.Chipset.test(v);
- });
- if (interestingLineArr.length >0) {
- // TODO we are parsing only the first found line; is it alright?
- interestingArray = that.RE.Chipset.exec(interestingLineArr[0]);
- interestingLine = interestingArray[2].
- replace(/[\s"]+/g," ").trim();
- // Persuade createNewButton to have mercy and to actually add
- // non-default button
- that.constantData.chipMagicTrigger = true;
- that.packages["rh-xorg"].chipMagic.chipMagic = interestingLine+"\t"+interestingArray[1]
- .toUpperCase();
- that.createNewButton("status_whiteboard", true, "rh-xorg", "chipMagic");
- }
- }
- }
- }).get();
- this.XorgLogAttListIndex++;
-};
-
-RHBugzillaPage.prototype.analyzeXorgLog = function analyzeXorgLog(attachID) {
- var infoWin = this.win.open("", "Check att. " + attachID,
- "width=640,height=640,status=no,location=no");
- var doc = infoWin.document;
- doc.body.innerHTML = "<pre id='textPre'></pre>";
- // TODO var oldCursor = doc.body.style.cursor;
- // doc.body.style.cursor = "wait";
- var preElem = doc.getElementById("textPre");
-
- var attURL = "https://bugzilla.redhat.com/attachment.cgi?id=" + attachID;
- var that = this;
- Request({
- url: attURL,
- onComplete: function(response) {
- if (response.status == 200) {
- var results = response.text.split("\n").
- filter(function(line) {
- return (that.RE.soughtLines.test(line));
- });
- results.sort();
- results = util.removeDuplicates(results);
- // Remove headers
- if (results.length >= 1) {
- results.splice(0, 1);
- }
- if (results.length > 0) {
- results.forEach(function(l) {
- preElem.innerHTML += l + "\n";
- });
- // Add a summary
- preElem.innerHTML += "----------\n" +
- results.length + " interesting lines found.";
- } else {
- preElem.innerHTML += "No matching lines found!";
- }
- }
- // doc.body.style.cursor = oldCursor;
- }
- }).get();
-};
-
-/**
- * Return string with the ID for the external_id SELECT for external bugzilla
- *
- * @param URLhostname String hostname of the external bugzilla
- * @return String with the string for the external_id SELECT
- */
-RHBugzillaPage.prototype.getBugzillaName = function getBugzillaName(URLhostname) {
- var bugzillaID = "";
- var bzLabelNames = JSON.parse(self.data.load("bugzillalabelNames.json"));
- if (bzLabelNames[URLhostname]) {
- bugzillaID = bzLabelNames[URLhostname];
- } else {
- bugzillaID = "";
- }
- return bugzillaID;
-};
-
-/**
- * Callback function for the XMLRPC request
- *
- * @param ret Object with xmlhttprequest response with attributes:
- * + status -- int return code
- * + statusText
- * + responseHeaders
- * + responseText
- */
-RHBugzillaPage.prototype.XMLRPCcallback = function XMLRPCcallback() {
- var that = this;
- this.reqCounter--;
- if (this.reqCounter <= 0) {
- timer.setTimeout(function () {
- that.win.location.reload(true);
- }, 1000);
- }
-};
-
-/**
- * The worker function -- call XMLRPC to fix MIME type of the particular
- * attachment
- *
- * @param id Integer with the attachment id to be fixed
- * @param type String with the new MIME type, optional defaults to "text/plain"
- * @param email Boolean whether email should be sent to appropriate person;
- * option, defaults to false
- *
- * updateAttachMimeType($data_ref, $username, $password)
- *
- * Update the attachment mime type of an attachment. The first argument is a
- * data hash containing information on the new MIME type and the attachment id
- * that you want to act on.
- *
- * $data_ref = { "attach_id" => "<Attachment ID>", # Attachment ID to perform
- * MIME type change on. "mime_type" => "<New MIME Type Value>", # Legal MIME
- * type value that you want to change the attachment to. "nomail" => 0, #
- * OPTIONAL Flag that is either 1 or 0 if you want email to be sent or not for
- * this change };
- *
- */
-RHBugzillaPage.prototype.fixAttachById = function fixAttachById(id, type, email) {
- if (type === undefined) {
- type = "text/plain";
- }
- if (email === undefined) {
- email = false;
- }
-
- var that = this;
- var msg = new xrpc.XMLRPCMessage("bugzilla.updateAttachMimeType");
- msg.addParameter( {
- 'attach_id' : id,
- 'mime_type' : type,
- 'nomail' : !email
- });
- msg.addParameter(this.login);
- msg.addParameter(this.password);
-
- // https://bugzilla.redhat.com/\
- // docs/en/html/api/extensions/compat_xmlrpc/code/webservice.html
- // test on https://bugzilla.redhat.com/show_bug.cgi?id=485145
- Request({
- url: this.constantData.XMLRPCData[this.hostname].url,
- onComplete: function(response) {
- if (response.status == 200) {
- that.XMLRPCcallback.call(that);
- }
- },
- content: msg.xml(),
- contentType: "text/xml"
- }).post();
- this.reqCounter++;
-};
-
-/**
- * Add a link to the bad attachment for fixing it.
- *
- * @param
- * <TR> DOM jQuery element with a bad attachment
- * @return none
- */
-RHBugzillaPage.prototype.addTextLink = function addTextLink(row) {
- var elemS = row[4].getElementsByTagName("td");
- var elem = elemS[elemS.length - 1];
- this.createDeadLink("addFix2TextLink", "text", elem,
- this.fixAttachById, row[1], "br");
-};
-
-/**
- * Add information about the upstream bug upstream, and closing it.
- *
- * @param evt Event which called this handler
- * @return none
- */
-RHBugzillaPage.prototype.addClosingUpstream = function() {
- var refs = this.doc.getElementById("external_bugs_table")
- .getElementsByTagName("tr");
-
- // that's a bad id, if there is a one. :)
- var inputBox = this.doc.getElementById("inputbox");
- var externalBugID = 0;
- var wholeURL = "";
-
- // Fix missing ID on the external_id SELECT
- this.doc.getElementsByName("external_id")[0].setAttribute("id",
- "external_id");
-
- if (inputBox.value.match(/^http.*/)) {
- wholeURL= new url.URL(inputBox.value);
- externalBugID = util.getBugNo(wholeURL);
- if (externalBugID) {
- inputBox.value = externalBugID;
- }
- // get bugzillaName and set the label
- var bugzillaName = this.getBugzillaName(wholeURL.host);
- this.selectOptionByLabel("external_id", bugzillaName);
- } else if (!isNaN(inputBox.value)) {
- externalBugID = parseInt(inputBox.value, 10);
- var bugzillaHostname = this.doc.getElementById("external_id").value;
- wholeURL = bugzillaHostname+"show_bug.cgi?id="+externalBugID;
- } else {
- // no inputBox.value -- maybe there is an external bug from
- // the previous commit?
- }
-
- // It is not good to close bug as UPSTREAM, if there is no reference
- // to the upstream bug.
- if ((externalBugID > 0) || (refs.length > 2)) {
- var msgStr = this.commentStrings.sentUpstreamString;
- msgStr = msgStr.replace("§§§", wholeURL);
- this.centralCommandDispatch("comment",msgStr);
- this.centralCommandDispatch("status", "CLOSED");
- this.centralCommandDispatch("resolution", "UPSTREAM");
- } else {
- console.log("No external bug specified among the External References!");
- }
-};
-
-RHBugzillaPage.prototype.markBugTriaged = function() {
- // Now we lie completely, we just set keyword Triaged,
- // this is not just plain ASSIGNED, but
- // modified according to
- // https://fedoraproject.org/wiki/BugZappers/Meetings/Minutes-2009-Oct-27
- // and
- // http://meetbot.fedoraproject.org/fedora-meeting/2009-11-24\
- // /fedora-meeting.2009-11-24-15.11.log.html
- // and
- // http://meetbot.fedoraproject.org/fedora-meeting/2009-11-24\
- // /fedora-meeting.2009-11-24-15.11.log.html
- // for F13 and later, ASSIGNED is "add Triaged keyword" (as well)
- // for <F13 it is "add both" (ASSIGNED status and Triaged keyword)
- var ver = this.doc.getElementById("version").value;
- if ((!this.isEnterprise()) && (ver <= 12)) {
- this.selectOption("bug_status", "ASSIGNED");
- }
- this.addStuffToTextBox("keywords","Triaged");
-};
-
-/**
- *
- */
-RHBugzillaPage.prototype.parseBacktrace = function(ret) {
- var splitArray = ret.split("\n");
- var i = 0, ii = splitArray.length;
- var outStr = "", curLine = "", numStr = "";
- var lineCounter = 0, endLineNo = 0;
-
- while (i < ii) {
- if (this.RE.signalHandler.test(splitArray[i])) {
- break;
- }
- i++;
- }
-
- if (i < ii) {
- lineCounter = parseInt(this.RE.frameNo.exec(splitArray[i])[1], 10);
- endLineNo = lineCounter + NumberOfFrames;
- curLine = splitArray[i];
- while ((lineCounter < endLineNo) && (curLine.trim().length > 0)
- && (i < ii)) {
- outStr += curLine + '\n';
- numStr = this.RE.frameNo.exec(curLine);
- if (numStr) {
- lineCounter = parseInt(numStr[1], 10);
- }
- i++;
- curLine = splitArray[i];
- }
- return outStr;
- }
- return "";
-};
-
-// exports.RHBugzillaPage = apiUtils.publicConstructor(RHBugzillaPage);
-exports.RHBugzillaPage = RHBugzillaPage;
diff --git a/lib/util.js b/lib/util.js
index 4612b66..089e31c 100644
--- a/lib/util.js
+++ b/lib/util.js
@@ -9,36 +9,9 @@ var Ci = require("chrome").Ci;
var urlMod = require("url");
/**
- * Function for the management of the prototypal inheritace
- * David Flanagan, Javascript: The Definitve Guide,
- * IV. edition, O'Reilly, 2006, p. 168
- *
- * @param superobject
- * @return new object, it needs new prototype.constructor
- *
- * <pre>
- * function Father(x) {
- * this.family = x;
- * }
- *
- * function Son(x,w) {
- * Father.call(this,x);
- * this.wife = w;
- * }
- * Son.prototype = heir(Father);
- * Son.prototype.constructor = Son;
- * </pre>
- */
-exports.heir = function heir(p) {
- function F() {};
- F.prototype = p.prototype;
- return new F();
-};
-
-/**
* get parameters of URL as an object (name, value)
*/
-var getParamsFromURL = exports.getParamsFromURL = function getParamsFromURL (url, base) {
+function getParamsFromURL (url, base) {
if (!url || (url.toString().length === 0)) {
throw new Error("Missing URL value!");
}
@@ -50,7 +23,7 @@ var getParamsFromURL = exports.getParamsFromURL = function getParamsFromURL (url
var paramsArr = url.path.split("?");
if (paramsArr.length === 1) {
return {};
- }
+ }
// get convert URL parameters to an Object
var params = {}, s = [];
@@ -59,21 +32,7 @@ var getParamsFromURL = exports.getParamsFromURL = function getParamsFromURL (url
params[s[0]] = s[1];
});
return params;
-};
-
-/**
- * parse XML object out of string working around various bugs in Gecko implementation
- * see https://developer.mozilla.org/en/E4X for more information
- *
- * @param inStr String with unparsed XML string
- * @return XML object
- */
-exports.parseXMLfromString = function parseXMLfromString (inStuff) {
- // if (typeof inStuff !== 'string') In future we should recognize this.response
- // and get just .text property out of it. TODO
- var respStr = inStuff.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""); // bug 336551
- return new XML(respStr);
-};
+}
/**
* Get a bug no from URL ... fails with aliases
@@ -106,139 +65,13 @@ exports.getISODate = function getISODate(dateStr) {
};
/**
- * Check whether an item is member of the list. Idea is just to make long if
- * commands slightly more readable.
- *
- * @param mbr string to be searched in the list
- * @param list list
- * @return position of the string in the list, or -1 if none found.
- */
-var isInList = exports.isInList = function isInList(mbr, list) {
- if (!list) {
- return false;
- }
- return (list.indexOf(mbr) !== -1);
-};
-
-/**
- * Make sure value returned is Array
- *
- * @param Array/String
- * @return Array
- *
- * If something else than Array or String is passed to the function
- * the result will be untouched actual argument of the call.
- */
-var valToArray = exports.valToArray = function valToArray(val) {
- var isArr = val &&
- val.constructor &&
- val.constructor.name === "Array";
- return isArr ? val : [val];
-};
-
-/**
- * Merges two comma separated string as a list and returns new string
- *
- * @param str String with old values
- * @param value String/Array with other values
- * @return String with merged lists
- */
-exports.addCSVValue = function addCSVValue(str, value) {
- var parts = (str.trim().length > 0 ? str.split(/[,\s]+/) : []);
- if (!value) {
- return str;
- }
- if (!isInList(value, parts)) {
- var newValue = valToArray(value);
- parts = parts.concat(newValue);
- }
- // this is necessary to get comma-space separated string even when
- // value is an array already
- parts = parts.join(",").split(",");
- return parts.join(", ");
-};
-
-/**
- * Treats comma separated string as a list and removes one item from it
- *
- * @param str String treated as a list
- * @param value String with the value to be removed from str
- * @return String with the resulting list comma separated
- */
-exports.removeCSVValue = function removeCSVValue(str, value) {
- str = str.trim();
- var parts = str ? str.split(/[,\s]+/) : [];
- var valueArr = value instanceof Array ? value : value.split(/[,\s]+/);
- parts = parts.filter(function (e, i, a) {
- return (!isInList(e, valueArr));
- });
- return parts.join(", ");
-};
-
-/**
- * select element of the array where regexp in the first element matches second
- * parameter of this function
- *
- * @param list Array with regexps and return values
- * @param chosingMark String by which the element of array is to be matched
- * @return Object chosen element
+ * object to pack messaging. Use as in
+ postMessage(new Message("GetPassword", {
+ login: login,
+ hostname: location.hostname
+ }));
*/
-var filterByRegexp = exports.filterByRegexp =
- function filterByRegexp(list, chosingMark) {
- var chosenPair = [];
- if (list.length > 0) {
- chosenPair = list.filter(function (pair) {
- return new RegExp(pair.regexp, "i").test(chosingMark);
- });
- }
- if (chosenPair.length > 0) {
- return chosenPair[0].addr;
- } else {
- return "";
- }
-};
-
-/**
- * remove elements from the page based on their IDs
- *
- * @param doc Document object
- * @param target String/Array with ID(s)
- * @param remove Boolean indicating whether the node should be
- * actually removed or just hidden.
- * @return none
- * TODO remove parameter could be replaced by function which would
- * do actual activity.
- */
-exports.killNodes = function killNodes(doc, target, remove) {
- target = target.trim();
- var targetArr = target instanceof Array ? target : target.split(/[,\s]+/);
- targetArr.forEach(function(x) {
- if (remove) {
- var targetNode = doc.getElementById(x);
- targetNode.parentNode.removeChild(targetNode);
- } else {
- x.style.display = "none";
- }
- });
-};
-
-exports.getObjectKeys = function getObjectKeys(obj) {
- var keys = [];
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- keys.push(key);
- }
- }
- return keys;
-};
-
-exports.removeDuplicates = function removeDuplicates (arr) {
- for (var i = 0; i < arr.length; i++) {
- for (var j = i + 1; j < arr.length; j++) {
- if (arr[i] == arr[j]) {
- arr.splice (j, 1);
- }
- }
- }
- return arr;
+exports.Message = function Message(cmd, data) {
+ this.cmd = cmd;
+ this.data = data;
};
diff --git a/lib/xmlrpc.js b/lib/xmlrpc.js
index e883d91..0b84c07 100644
--- a/lib/xmlrpc.js
+++ b/lib/xmlrpc.js
@@ -1,4 +1,3 @@
-/*jslint rhino: true, forin: true, onevar: false, browser: true */
/*global exports: false */
"use strict";
// Modification of Matěj Cepl released under the MIT/X11 license
diff --git a/package.json b/package.json
index ea847cb..255ee81 100644
--- a/package.json
+++ b/package.json
@@ -7,5 +7,5 @@
"description": "Additional buttons and other function helping in the triage on bugzilla",
"author": "Matej Cepl (http://matej.ceplovi.cz)",
"license": "MIT/X11 (http://opensource.org/licenses/mit-license.php)",
- "version": "0.27"
+ "version": "0.91"
}
diff --git a/tests/pagemod-test-helpers.js b/tests/pagemod-test-helpers.js
new file mode 100644
index 0000000..b019810
--- /dev/null
+++ b/tests/pagemod-test-helpers.js
@@ -0,0 +1,55 @@
+"use strict";
+
+const {Cc,Ci} = require("chrome");
+
+/**
+ * A helper function that creates a PageMod, then opens the specified URL
+ * and checks the effect of the page mod on 'onload' event via testCallback.
+ */
+exports.testPageMod = function testPageMod(test, testURL, pageModOptions,
+ testCallback, timeout) {
+ var xulApp = require("xul-app");
+ if (!xulApp.versionInRange(xulApp.platformVersion, "1.9.3a3", "*") &&
+ !xulApp.versionInRange(xulApp.platformVersion, "1.9.2.7", "1.9.2.*")) {
+ test.pass("Note: not testing PageMod, as it doesn't work on this platform version");
+ return null;
+ }
+
+ var wm = Cc['@mozilla.org/appshell/window-mediator;1']
+ .getService(Ci.nsIWindowMediator);
+ var browserWindow = wm.getMostRecentWindow("navigator:browser");
+ if (!browserWindow) {
+ test.pass("page-mod tests: could not find the browser window, so " +
+ "will not run. Use -a firefox to run the pagemod tests.")
+ return null;
+ }
+
+ if (timeout !== undefined) {
+ test.waitUntilDone(timeout);
+ } else {
+ test.waitUntilDone();
+ }
+
+ let loader = test.makeSandboxedLoader();
+ let pageMod = loader.require("page-mod");
+
+ var pageMods = [new pageMod.PageMod(opts) for each(opts in pageModOptions)];
+
+ var tabBrowser = browserWindow.gBrowser;
+ var newTab = tabBrowser.addTab(testURL);
+ tabBrowser.selectedTab = newTab;
+ var b = tabBrowser.getBrowserForTab(newTab);
+
+ function onPageLoad() {
+ b.removeEventListener("load", onPageLoad, true);
+ testCallback(b.contentWindow.wrappedJSObject, function done() {
+ pageMods.forEach(function(mod) mod.destroy());
+ // XXX leaks reported if we don't close the tab?
+ tabBrowser.removeTab(newTab);
+ test.done();
+ });
+ }
+ b.addEventListener("load", onPageLoad, true);
+
+ return pageMods;
+}
diff --git a/tests/test-color.js b/tests/test-color.js
index 7394057..2006fd9 100644
--- a/tests/test-color.js
+++ b/tests/test-color.js
@@ -1,30 +1,30 @@
/*global exports: false, require: false */
// TODO: add some failing tests as well
"use strict";
-var util = require("color");
+//var util = require("color");
// testing Color object
-exports.ensureColorNew = function (test) {
+var ensureColorNew = function (test) {
var col = new util.Color(255, 255, 166);
test.assertEqual(col.toString(), "#ffffa6",
"creation of new RGB Color object");
};
-exports.ensureColorUpdate = function (test) {
+var ensureColorUpdate = function (test) {
var col = new util.Color(255, 255, 166);
col.update(255, 224, 176);
test.assertEqual(col.toString(), "#ffe0b0",
"updating Color object");
};
-exports.ensureColorHSL = function (test) {
+var ensureColorHSL = function (test) {
var col = new util.Color(255, 224, 176);
test.assertEqual(col.hsl().toSource(),
"[0.10126582278481013, 1, 0.8450980392156863]",
"converting to HSL model");
};
-exports.ensureColorLight = function (test) {
+var ensureColorLight = function (test) {
var col = new util.Color(255, 224, 176);
test.assertEqual(col.lightColor().toString(), "#e8dcc9",
"getting a light color");
diff --git a/tests/test-match-pattern.js b/tests/test-match-pattern.js
new file mode 100644
index 0000000..ed51b43
--- /dev/null
+++ b/tests/test-match-pattern.js
@@ -0,0 +1,11 @@
+var { MatchPattern } = require("match-pattern");
+
+exports.ensureMatchPattern = function (test) {
+ var pattern = new MatchPattern("https://bugzilla.redhat.com/attachment.cgi");
+ console.log("pattern = " + pattern);
+ test.assert(pattern.
+ test("https://bugzilla.redhat.com/attachment.cgi"), "testing match pattern");
+ test.assert(!pattern.
+ test("https://bugzilla.redhat.com/attachment.cgi?bugid=676538&action=enter"),
+ "testing failing match pattern");
+};
diff --git a/tests/test-pageMod.js b/tests/test-pageMod.js
new file mode 100644
index 0000000..8662a4c
--- /dev/null
+++ b/tests/test-pageMod.js
@@ -0,0 +1,141 @@
+/*jslint white: false, eqeqeq: false, plusplus: false, onevar: false, newcap: false */
+/*global exports: false, require: false, console: false, log: false */
+"use strict";
+var Cc = require("chrome").Cc;
+var Ci = require("chrome").Ci;
+var main = require("main");
+var utilMod = require("util");
+var testPageMod = require("pagemod-test-helpers").testPageMod;
+var self = require("self");
+
+var theURL = main.theURL;
+var testURL = self.data.url('tests/change-more-bugs01.html');
+var JSONifiedMessage = '{"cmd":"testMessage","data":{"a":"first","b":"second"}}';
+
+exports.ensureMessagesWork = function(test) {
+ var msg = new utilMod.Message("testMessage", { a: "first", b: "second" } );
+ test.assertEqual(msg.cmd, "testMessage",
+ "msg.cmd comes over well");
+ test.assertEqual(msg.data.a, "first",
+ "msg.data.a comes over well");
+ test.assertEqual(msg.data.b, "second",
+ "msg.data.b comes over well");
+ test.assertEqual(JSON.stringify(msg), JSONifiedMessage,
+ "JSONification of Message works as well");
+};
+
+/*
+
+var theURL = main.theURL;
+var testURL = self.data.url('tests/change-more-bugs01.html');
+
+var contentScriptLibraries = {
+ "bugzilla.redhat.com": [
+ self.data.url("util.js"),
+ self.data.url("color.js"),
+ self.data.url("rhbzpage.js"),
+ self.data.url("bzpage.js")
+ ]
+};
+
+libbz.initialize(libbz.config, function () {
+ pageMod.PageMod({
+ include: [
+ "https://bugzilla.redhat.com/show_bug.cgi?id=*"
+ ],
+ contentScriptWhen: 'ready',
+ contentScriptFile: contentScriptLibraries["bugzilla.redhat.com"],
+ onAttach: function onAttach(worker, msg) {
+ console.log("worker: " + worker);
+ worker.on('message', function (msg) {
+ messageHandler(worker, msg);
+ });
+ }
+ });
+});
+
+pageMod.PageMod({
+ include: [
+ "https://bugzilla.redhat.com/process_bug.cgi"
+ ],
+ contentScriptWhen: 'ready',
+ contentScriptFile: self.data.url("skip-bug.js")
+});
+ */
+
+var ensureSimplePageLoad = function (test) {
+ console.log("testURL = " + testURL);
+ testPageMod(test, testURL, [{
+ include: ["*"],
+ contentScriptWhen: 'ready',
+ contentScriptFile: [
+ self.data.url("libPW.js"),
+ self.data.url("simplePageWorker.js")
+ ],
+ onAttach: function onAttach(worker) {
+ worker.on('message', function (msg) {
+ switch (msg.cmd) {
+ case "LogMessage":
+ log(msg.data);
+ break;
+ case "CallBack":
+ worker.postMessage(new utilMod.Message("Main", null));
+ break;
+ default:
+ console.error(msg);
+ }
+ });
+ }
+ }],
+ function (win, done) {
+ test.assertNotEqual(win.document.getElementsByTagName("form")[0],
+ null, "test of loading the page");
+ done();
+ });
+};
+
+var ensurePageLoadsWell = function (test) {
+ var wm = Cc['@mozilla.org/appshell/window-mediator;1']
+ .getService(Ci.nsIWindowMediator);
+ var browserWindow = wm.getMostRecentWindow("navigator:browser");
+ if (!browserWindow) {
+ test.fail("page-mod tests: could not find the browser window, so " +
+ "will not run. Use -a firefox to run the pagemod tests.");
+ return null;
+ }
+
+ var loader = test.makeSandboxedLoader();
+ var pageMod = loader.require("page-mod");
+ var testDoc = {}, b = {}, tabBrowser = {}, newTab = {};
+
+ pageMod.PageMod({
+ include: ["*"],
+ contentScriptWhen: 'ready',
+ contentScriptFile: [
+ self.data.url("libPW.js"),
+ self.data.url("pageWorker.js")
+ ],
+ onAttach: function onAttach(worker) {
+ worker.on('message', function (msg) {
+ switch (msg.cmd) {
+ case "testReady":
+ testDoc = b.contentWindow.wrappedJSObject.document;
+ test.assertNotEqual(testDoc.getElementById("dupeid_action"),
+ null, "test of DOM modifications of the page");
+ pageMod.destroy();
+ tabBrowser.removeTab(newTab);
+ test.done();
+ // the test itself
+ break;
+ default:
+ main.messageHandler(worker, msg);
+ }
+ });
+ }
+ });
+
+ tabBrowser = browserWindow.gBrowser;
+ newTab = tabBrowser.addTab(testURL);
+ tabBrowser.selectedTab = newTab;
+ b = tabBrowser.getBrowserForTab(newTab);
+};
diff --git a/tests/test-util.js b/tests/test-util.js
index 9acb54c..d4e4a78 100644
--- a/tests/test-util.js
+++ b/tests/test-util.js
@@ -6,7 +6,7 @@ var util = require("util");
var urlMod = require("url");
// testing util.heir
-exports.ensureHeir = function (test) {
+var ensureHeir = function (test) {
var fedlimid = {}, naoise = {};
function Father(x) {
@@ -51,28 +51,28 @@ exports.ensureHeir = function (test) {
};
// testing util.isInList
-exports.ensureIsInListTrue = function (test) {
+var ensureIsInListTrue = function (test) {
test.assert(util.isInList("a", ["a"]),
"conversion of a string to an array");
};
-exports.ensureIsInListFalse = function (test) {
+var ensureIsInListFalse = function (test) {
test.assert(!util.isInList("b", ["a"]),
"conversion of a string to an array");
};
-exports.ensureIsInListEmpty = function (test) {
+var ensureIsInListEmpty = function (test) {
test.assert(!util.isInList("b", []),
"conversion of a string to an array");
};
-exports.ensureIsInListNoMember = function (test) {
+var ensureIsInListNoMember = function (test) {
test.assert(!util.isInList("", ["x"]),
"conversion of a string to an array");
};
// testing util.filterByRegexp
-exports.ensureFilterByRegexp = function (test) {
+var ensureFilterByRegexp = function (test) {
var list = [
{
"regexp": "test(ing|ed)",
@@ -92,7 +92,7 @@ exports.ensureFilterByRegexp = function (test) {
"simple testing of filterByRegexp with non-string return value");
};
-exports.ensureFilterByRegexpEmpty = function (test) {
+var ensureFilterByRegexpEmpty = function (test) {
test.assertRaises(function () {
util.filterByRegexp(undefined, "tralala");
},
@@ -101,78 +101,78 @@ exports.ensureFilterByRegexpEmpty = function (test) {
};
// testing util.getISODate
-exports.ensureGetISODate = function (test) {
+var ensureGetISODate = function (test) {
test.assertEqual(util.getISODate("Mon May 31 2010 23:29:09 GMT+0200 (CET)"),
"2010-05-31", "conversion of a Date to ISO-formatted String");
};
// testing util.valToArray
-exports.ensureValToArrayString = function (test) {
+var ensureValToArrayString = function (test) {
test.assertEqual(JSON.stringify(util.valToArray("a")),
JSON.stringify(["a"]),
"conversion of a string to an array");
};
-exports.ensureValToArrayEmpty = function (test) {
+var ensureValToArrayEmpty = function (test) {
test.assertEqual(JSON.stringify(util.valToArray("")),
JSON.stringify([""]),
"conversion of an empty string to an array");
};
-exports.ensureValToArrayArray = function (test) {
+var ensureValToArrayArray = function (test) {
test.assertEqual(JSON.stringify(util.valToArray(["a"])),
JSON.stringify(["a"]),
"non-conversion of an array");
};
// testing util.addCSVValue
-exports.ensureCSVAddedToNull = function (test) {
+var ensureCSVAddedToNull = function (test) {
test.assertEqual(util.addCSVValue("", "b"), "b",
"adding a string to empty string");
};
-exports.ensureCSVAddedNull = function (test) {
+var ensureCSVAddedNull = function (test) {
test.assertEqual(util.addCSVValue("a", ""), "a",
"adding nothing to a string");
};
-exports.ensureCSVAddedString = function (test) {
+var ensureCSVAddedString = function (test) {
test.assertEqual(util.addCSVValue("a", "b"), "a, b",
"adding one string to another one");
};
-exports.ensureCSVAddedArray = function (test) {
+var ensureCSVAddedArray = function (test) {
test.assertEqual(util.addCSVValue("a", ["b", "c"]), "a, b, c",
"adding array to a string");
};
-exports.ensureCSVAddedArray2Array = function (test) {
+var ensureCSVAddedArray2Array = function (test) {
test.assertEqual(util.addCSVValue("a, b", ["c", "d"]), "a, b, c, d",
"adding one array to another");
};
// testing util.removeCSVValue
-exports.ensureCSVRemoveSimple = function (test) {
+var ensureCSVRemoveSimple = function (test) {
test.assertEqual(util.removeCSVValue("a, b", "b"), "a",
"removing one string from an array");
};
// also checking a tolerancy against different ways of writing arrays
-exports.ensureCSVRemoveNonMember = function (test) {
+var ensureCSVRemoveNonMember = function (test) {
test.assertEqual(util.removeCSVValue("a,b", "c"), "a, b",
"removing a string from an array of which it isn't a member");
};
-exports.ensureCSVRemoveEmpty = function (test) {
+var ensureCSVRemoveEmpty = function (test) {
test.assertEqual(util.removeCSVValue("", "c"), "",
"removing a string from an empty array");
};
// testing util.getObjectKeys
-exports.ensureGetObjectKeys = function (test) {
+var ensureGetObjectKeys = function (test) {
var testObj = {
a: 1,
b: 2
@@ -183,7 +183,7 @@ exports.ensureGetObjectKeys = function (test) {
};
// testing util.getParamsFromURL
-exports.ensureGetParamsFromURL = function (test) {
+var ensureGetParamsFromURL = function (test) {
test.assertEqual(JSON.stringify(util.getParamsFromURL("https://bugzilla.redhat.com/show_bug.cgi?id=549066")),
JSON.stringify({id:"549066"}),
"simply compare result of bugzilla show_page URL");
@@ -206,7 +206,7 @@ exports.ensureGetParamsFromURL = function (test) {
};
// testing util.getBugNo
-exports.ensureGetBugNo = function (test) {
+var ensureGetBugNo = function (test) {
var bugNo = util.getBugNo("https://bugzilla.redhat.com/show_bug.cgi?id=597141");
test.assertEqual(bugNo, 597141, "getting bug number");
bugNo = util.getBugNo("https://bugzilla.redhat.com/show_bug.cgi?id=serialWacom");